質問1200038868で回答をいただいた件について質問です。


open(FH, "$ARGV[0]");

local $/;

$s=<FH>;

local %/;

@a=split /C:/i, $s;

shift @a;

foreach $a (@a) {

$a =~ s/[ \n]+/,/g;

$a =~ s/,$//;

print "C:", $a, "\n";

}

ここでの

local $/;

local %/;

は何を宣言しているのかお教えねがえますでしょうか。

回答の条件
  • 1人2回まで
  • 登録:2008/01/17 15:26:55
  • 終了:2008/01/17 19:54:59

回答(1件)

id:yoshifumi1975 No.1

yoshifumi1975回答回数58ベストアンサー獲得回数102008/01/17 16:58:31

回答した本人です。ポイントは不要です。

local %/; <-これは「$/」と書くつもりのミスタイプです。ですのでこの行はまったく不要です。ごめんなさい。

local $/; <-これは、Perlのレコードセパレータ(デフォルトでは改行)を、空にしています。$/ = undef; としても同じです。

使う場面としては、ファイルの内容を改行ごとに読み込むのではなく、一気に読み込むときに以下のようにして使います。「{}」の中でlocalを付けて使えば、一時的に、「$/」を空にして、「{}」の外に出れば、元の値(デフォルトの改行)に戻りますので、local をつけて使います。

{

local $/;

$contents = <FH> #通常は1行分しか読まないが、「$/」が空になっているので、最後まで一気に読み込みます。

}

参考URL

http://flex.ee.uec.ac.jp/texi/perl/perl_151.html

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

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

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

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