• 締切済み

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);

みんなの回答

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.3

> エラーを見るかぎり、コードに間違いはなく、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 等で宣言する、ということも必要です。特に大規模なスクリプトになる場合は

MASA0901
質問者

お礼

ご回答ありがとうございます。原因はどうやら環境変数の指定をして、パスを通してやることだったみたいです。 >言語としての手軽さが犠牲になりますが、このような「使ってない変数やリストを使ってしまう」のを防ぐために、 use >strict ; して使う変数はmy 等で宣言する、ということも必要です。特に大規模なスクリプトになる場合は につて、もっと勉強しておきます。

回答No.2

変数 $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

MASA0901
質問者

お礼

ファイルを指定していないことも間違いでしたが、環境変数に原因があるということが分かりました。 ご回答ありがとうございます。

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.1

#!/usr/bin/perl -w open my $fh, "<", "test.txt" or die "$!"; while(<$fh>) { print $_; } close ($fh);

関連するQ&A