在Perl裡。一般是@lines = <F>;
來將檔案內容全存進陣列變數,若是$line = <F>
則只存第一列。而想該$line涵蓋檔案所有內容,包括換行,必須先執行undef $/;
才行。$/
是換行變數,預設是\n,可以改變它為其它字符,而undef就是取消系統換行字元,就能使用鑽石符號<>一口氣讀進變數。
承昨天的用javaue.def的題目,用Perl跨行比對如下:
#!/usr/bin/perl
sub handleBlock {
my $block = shift;
@lines = split/\n/, $block;
print $lines[0] . "\n";
}
undef $/;
open F, "./javaue.def" or die "$!";
$ctx = <F>;
close F;
while ($ctx =~ /(Definition for table .*?End of definition)/gs) {
handleBlock($1);
}
undef $/;
,才能全數讀進$ctx。