perlのファイルの読み込みについて、

質問させてください。

通常ファイルをopenしたのちに、
行入力演算子などで読み込むと思います。

open $fh, $hoge_txt;
while (<$fh>){
#
}

ファイルをopenしなくても、
行入力演算子などで読み込めるのでしょうか。

while (<$hoge_txt>){
#
}

よろしくお願いします。

回答の条件
  • 1人2回まで
  • 登録:2008/12/16 20:05:22
  • 終了:2008/12/23 20:10:02

回答(3件)

id:m_nagase No.1

nagase回答回数58ベストアンサー獲得回数82008/12/16 22:28:43

ポイント27pt

読み込むファイルを標準入力でリダイレクトすれば、プログラム中でファイルをオープンしなくても読み込むことはできます。

while(<STDIN>){
#
}

上記のプログラムを hogereade.pl として、目的のファイルが hoge.txt とすると、Unix系、Dos/Windows系のOSで下記のようなコマンドによってhoge.txtを読み込むことができます。

Unix/linux

hogeread.pl < hoge.txt

Dos/Windows

perl hogeread.pl < hoge.txt
id:the_yakisoba

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

ファイルの中身が読めないことはわかりました。

たとえば、

下記のような記述をすると、

カレントディレクトリに該当するファイルが読み込めるのですが、

コレは "<>" を行入力演算子とは違う使い方をしているのでしょうか。

while (<*_test.pl>) {

print "$_\n";

}

2008/12/16 23:32:40
id:tomqlo No.2

tomqlo回答回数22ベストアンサー獲得回数22008/12/16 22:55:11

ポイント27pt

openを記述しなければ読み込めません。

openで読み込むファイル名を書かなければ、Perlはどのファイルからデータを読み込めばよいのか判断できないからです。

id:komamitsu No.3

komamitsu回答回数21ベストアンサー獲得回数22008/12/17 01:32:35

ポイント26pt

<*_test.pl>のほうはglob演算子では?

http://perldoc.perl.org/functions/glob.html

> カレントディレクトリに該当するファイルが読み込める

ファイル名が表示される、ってことですよね?

  • id:m_nagase
    while(<*_test.pl>)
    これでファイルの中身が読めますか?
    おそらくカレントディレクトリのファイル名が読めるのだと思いますが、<>演算子にファイルハンドルとスカラー変数以外の物を置くと、<>はファイル名グロブ演算子として働き、カレントディレクトリ(または、ファイルグロブパターンの一部として指定されたディレクトリ)のファイルに対してパターンマッチが行われ、マッチしたファイル名が返される。(プログラミングPerl VOLUME1 2.11.3 より) とあります。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません