LoginSignup
0
0

More than 5 years have passed since last update.

DATAハンドルを読み直して内容を2回表示する

Posted at

__END__または__DATA__以下に書いた文字列は特殊ハンドルDATAで読み込むことができる。

use 5.12.0;
while (my $line = <DATA>) {
        chomp $line;
        say "1 $line";
}
__END__
111
222
333
# 出力結果
1 111
1 222
1 333

ファイルハンドルなのでpostionが最後のままなので2回は読めない

use 5.12.0;
use warnings;

while (my $line = <DATA>) {
        chomp $line;
        say "1 $line";
}

while (my $line = <DATA>) {
        chomp $line;
        say "2 $line";
}
__END__
111
222
333
# 出力結果
1 111
1 222
1 333

2回読むにはseek関数で位置をリセットする

use 5.12.0;
use warnings;

while (my $line = <DATA>) {
  chomp $line;
  say "1 $line";
}
seek DATA, 0, 0;

while (my $line = <DATA>) {
  chomp $line;
  say "2 $line";
}
__END__
111
222
333
出力結果
1 111
1 222
1 333
2
2 use 5.12.0;
2 use warnings;
2
2 while (my $line = <DATA>) {
2       chomp $line;
2       say "1 $line";
2 }
2 seek DATA, 0, 0;
2
2 while (my $line = <DATA>) {
2       chomp $line;
2       say "2 $line";
2 }
2 __END__
2 111
2 222
2 333

seek関数で0指定だとファイルの先頭を指してしまうのでtell関数で事前に取得しておく。

use 5.12.0;
use warnings;

my $pos = tell DATA;
while (my $line = <DATA>) {
  chomp $line;
  say "1 $line";
}
seek DATA, $pos, 0;

while (my $line = <DATA>) {
  chomp $line;
  say "2 $line";
}
__END__
111
222
333
出力結果
1 111
1 222
1 333
2 111
2 222
2 333
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0