- 締切済み
perl ファイルが開かない
perl でファイルを開きたいのですが、なぜか開けません。何がいけないのでしょうか?エラーは、 Name "main::file" used only once: possible typo とでます。エラーを見るかぎり、コードに間違いはなく、apacheかOSに何か原因があるのではないかとおもうのですが、悩んでいます。OSはubuntuです。 #!/usr/bin/perl -w open (IN, "<test.txt") or die ("Could not open $file: $!"); while(<IN>) { print "$_"; } close (IN);
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- kmee
- ベストアンサー率55% (1857/3366)
> エラーを見るかぎり、コードに間違いはなく、apacheかOSに何か原因があるのではないかとおもうのですが その認識が間違いです。明らかにコードの間違い(あるいは、間違いが疑われる)ものです。 > "Could not open $file: $!" とありますが、このスクリプトのどこにも $file なる変数が定義や代入された形跡がありません。 Perlとしては、 未定義値→文字列としては空文字列なので Could not open : .... 等と表示されるでしょうが、これがプログラマの望んだ動作なのか、 Could not open file : .... と表示させたいのか($が余分) Could not open $file : .... と表示させたいのか($に\を付けてエスケープする) $file="test.txt" などとして < open (IN, "<", $filetest.txt") or die ("Could not open $file: $!"); として、エラーメッセージを Could not open test.txt : .... としたいのか、がわかりません。 なので 「typo(=打ち間違い)ではないですか?」と警告を出しているものです。 どのケースかによって、それにあった対処をしてください(あるいは、ここに無いことが目的かもしれませんが) 言語としての手軽さが犠牲になりますが、このような「使ってない変数やリストを使ってしまう」のを防ぐために、 use strict ; して使う変数はmy 等で宣言する、ということも必要です。特に大規模なスクリプトになる場合は
- auto-mata
- ベストアンサー率12% (1/8)
変数 $file が定義されていないからです。 #!/usr/bin/perl -w my $file; ←追加 open (IN, "<test.txt") or die ("Could not open $file: $!"); while(<IN>) { print "$_"; } close (IN); ではどうでしょうか。 ↓こちらを読む事をお勧めします。 http://www.geocities.jp/ky_webid/perl5/005.html
お礼
ファイルを指定していないことも間違いでしたが、環境変数に原因があるということが分かりました。 ご回答ありがとうございます。
- nora1962
- ベストアンサー率60% (431/717)
#!/usr/bin/perl -w open my $fh, "<", "test.txt" or die "$!"; while(<$fh>) { print $_; } close ($fh);
お礼
ご回答ありがとうございます。原因はどうやら環境変数の指定をして、パスを通してやることだったみたいです。 >言語としての手軽さが犠牲になりますが、このような「使ってない変数やリストを使ってしまう」のを防ぐために、 use >strict ; して使う変数はmy 等で宣言する、ということも必要です。特に大規模なスクリプトになる場合は につて、もっと勉強しておきます。