質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

Q&A

解決済

2回答

816閲覧

別ファイル定義の文字列を読みたい。

ma2hiro

総合スコア159

Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

0グッド

1クリップ

投稿2020/07/20 08:23

お世話になっております。

ActivePerlをWindowsServ上のIISで使用しております。

Perlにて別ファイルに定義した文字列を読み込ませたいと思っており以下のように実装しました。

defilepm

1package define; 2$url="URLTEST"; 31;

mainpl

1require 'data/define.pm'; 2$url = $define::url; 3 4print <<EOF; 5content-type: text/html 6Pragma: no-cache 7Cache-Control: no-cache 8 9<HTML> 10<HEAD> 11 <TITLE>test</TITLE> 12</HEAD> 13<BODY> 14$url 15</BODY> 16</HTML> 17

ですが

と表示されるだけで
こちらの想定しているURLTESTが表示されません。

なんとググって調査すれば良いのかご教授頂けないでしょうか?

お忙しいところ大変申し訳無いのですが上記お問い合わせいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dodox86

2020/07/20 08:38

お使いのエディターとかソースファイルとかHTMLのエンコード指定とか何か色々な原因が考えられるので回答を躊躇するし避けているのですが、とりあえずそれぞれの文字コードを意識した方が良いです。どこで化けて出力されているのか、コマンドプロンプトなのかPowerShellなのかCGI実行時のHTMLの出力、ブラウザー上の話なのか質問文中から分かりません。 それらを明示すればより適切な回答をもらえるかもしれません。 あと、大きなお世話かもしれませんが「お世話になっております」とか「お忙しいところ大変申し訳無いのですが上記お問い合わせいたします。」はこのような場ではちょっと不適なように思います。仕事ではありませんし、逆になんとなく習慣で使っているだけで誠意を感じない気もします。本当に大きなお世話で恐縮ですが。
showkit

2020/07/20 08:45

まず。「main.pl」の先頭の2行をコメントアウトして、body の「$url」の部分を「URLTEST」とそのまま記述した場合は、「URLTEST」と表示されますか? ブラウザで見ているものとして、ブラウザで「ソースを表示」してみるのも役に立つかと思います。
ma2hiro

2020/07/20 09:16

dodox86さん 文字コードはWinServer2008R2なのでsjisだと思っております。 仰るとおり慇懃無礼になっていました。ご忠告ありがとうございます。 showkitさん はい。body の「$url」の部分を「URLTEST」とすると URLTESTと表示されます。
guest

回答2

0

  • コードは今試しているものを正確にコピペしてみましょう。

  • 「```」の後ろは言語名(この場合はperl)を書くべきところなのでファイル名は本文に書いておくのが良いです。そして実際に使っているファイル名にしましょう。

  • モジュールの末尾の1;を0;にしたとき、ちゃんとエラーになるでしょうか?require文で違うモジュールを読み込んでいませんか?

投稿2020/07/20 16:48

harrek

総合スコア123

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

ぱっと見るだけでエラー箇所が2つあります。

  • require 'data/define.pm';がおそらく失敗する。そのdataディレクトリが@INCになければrequireできなくてエラーになります。main.plと同じレベルにdataディレクトリがあるなら、 require './data/define.pm';とカレントディレクトリからの相対パスとして与えれば成功するでしょう。

  • ヒアドキュメントの終端EOFがない。これはコンパイルエラーになるはずです。

どちらも解決できなければInternal Server Errorになるかと思われますが・・・

文法エラーのチェックはコマンドプロンプトからperl -c [スクリプト名]で実施できます。まずは文法チェックがOKになってからブラウザで試してみましょう。

投稿2020/07/20 09:05

hope_mucci

総合スコア4447

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ma2hiro

2020/07/20 09:20

hope_mucciさん コメントありがとうございます。 ``` C:\download>perl -c test.pl test.pl syntax OK ``` となっています。 文字コードはpm、plともにsjisです。 何か文字列の指定方法がおかしいのかな?と思っております……
hope_mucci

2020/07/20 09:30

main.pl ではなくて test.pl ですか? 確認してください。 また、質問に記載通りのコードなら文字コードは関係ありません(日本語文字ないし) `perl main.pl`で直接実行したら期待通りの出力が出るはずです。確認してみてください。 期待通りの出力が出なかったら、出力内容をコピペして質問に追記してください。
ma2hiro

2020/07/20 09:53

すいません。 test.plでやっていたのですが質問する際にtestだと変なのかと思いmainplに直しました。 出力内容は ``` C:\download>perl test.pl content-type: text/html Pragma: no-cache Cache-Control: no-cache <HTML> <HEAD> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=x-sjis"> <TITLE>test</TITLE> </HEAD> <BODY> ・ </BODY> </HTML> C:\download> ``` です。 本当にお手数おかけして申し訳無いですが どのように調査するのが良いかご助力頂けないでしょうか?
hope_mucci

2020/07/20 10:08

とりあえず文字コードはレスポンスヘッダで指定したほうが確実だと思われます。 content-type: text/html; charset=x-sjis define.pmのほうに余分な全角空白や日本語文字が入っていたりしませんか? 一度全部消して書き直してみるのも手です。
ma2hiro

2020/07/21 01:21

hope_mucciさん 仰るとおり >require './data/define.pm'; のように正確にして >define.pmのほうに余分な全角空白や日本語文字が入っていたりしませんか? >一度全部消して書き直してみるのも手です。 と書き直したら正常に出来ました。 本当にありがとうございます。 pm内に変な文字列が入っていたのだと思います。 質問する際にはそこの部分を気をつけます。 ありがとうございました。
ma2hiro

2020/07/21 01:26

解決したのですが >ヒアドキュメントの終端EOFがない。これはコンパイルエラーになるはずです。 が良く分からないのですが content-type: text/html\n\n             ^^ の事でしょうか? 私もLinux畑から移って来たのでコレで良いのかと思ったのですが Cache-Control: no-cache の後改行二行入れているのでWinServer2008R2でActivePerlの場合はコレで良いのかと思っております。 以上追記失礼します。
hope_mucci

2020/07/21 03:44

別所からソースをコピペしてきたりするときに、非可視の制御文字が混入することがあります。このような場合には書き直しが有効です。 ヒアドキュメントについて、print <<EOF;と書いたらそれ以降のどこかにEOFを書かないと終端が分からないのでエラーになります。質問のmain.plにはこのEOFが記載されていないのでエラーになります。"\n\n"は単なる改行です。
ma2hiro

2020/07/21 06:45

hope_mucciさん 仰るとおり EOF が抜けて折りました。 ソース貼り付ける際にミスをしてしまい失礼しました。 今後質問する際には重々気をつけようとします。 この度は誠にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問