dポイントプレゼントキャンペーン実施中!

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

A 回答 (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 等で宣言する、ということも必要です。特に大規模なスクリプトになる場合は
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。原因はどうやら環境変数の指定をして、パスを通してやることだったみたいです。

>言語としての手軽さが犠牲になりますが、このような「使ってない変数やリストを使ってしまう」のを防ぐために、 use >strict ; して使う変数はmy 等で宣言する、ということも必要です。特に大規模なスクリプトになる場合は

につて、もっと勉強しておきます。

お礼日時:2011/02/18 17:12

変数 $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
    • good
    • 1
この回答へのお礼

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

ご回答ありがとうございます。

お礼日時:2011/02/18 17:08

#!/usr/bin/perl -w



open my $fh, "<", "test.txt" or die "$!";

while(<$fh>)
{
print $_;
}

close ($fh);
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!