这段Perl代码是按照它说的做的吗?
在寻找某样东西时,我偶然发现了这个答案 我想知道为什么变量这段Perl代码是按照它说的做的吗?,perl,Perl,在寻找某样东西时,我偶然发现了这个答案 我想知道为什么变量$first\u line只包含输入文件的第一行 守则: #!/usr/bin/env perl use strict; my $filename = shift; open my $in_fh, '<', $filename or die "Cannot open $filename for reading: $!"; my $first_line = <$in_fh>; open my $out_fh, '&
$first\u line
只包含输入文件的第一行
守则:
#!/usr/bin/env perl
use strict;
my $filename = shift;
open my $in_fh, '<', $filename
or die "Cannot open $filename for reading: $!";
my $first_line = <$in_fh>;
open my $out_fh, '>', "$filename.tmp"
or die "Cannot open $filename.tmp for writing: $!";
$first_line =~ s/some translation/goes here/;
print {$out_fh} $first_line;
print {$out_fh} $_ while <$in_fh>; # sysread/syswrite is probably better
close $in_fh;
close $out_fh;
# overwrite original with modified copy
rename "$filename.tmp", $filename
or warn "Failed to move $filename.tmp to $filename: $!";
#/usr/bin/env perl
严格使用;
我的$filename=shift;
打开我的$in_fh,,“$filename.tmp”
或“无法打开$filename.tmp进行写入:$!”;
$first_line=~s/一些翻译/转到这里/;
打印{$out\u fh}$第一行;
打印{$out_fh}$\uwhile;#sysread/syswrite可能更好
以欧元结算美元;
关闭$OFH;
#用修改后的副本覆盖原件
重命名“$filename.tmp”,$filename
或警告“未能将$filename.tmp移动到$filename:$!”;
据我所知,在标量上下文中使用时,表达式
将返回文件的第一行,如果在列表上下文中使用,则返回文件的完整内容:
my $first_line = <FH>;
my @lines = <FH>;
但是,要注意全局重新定义Perl内置变量的风险。您可以使用local
将其仅应用于当前范围
local $/;
my $lines = <FH>;
表达式
在标量上下文中使用时将返回文件的第一行,如果在列表上下文中使用,则返回文件的完整内容:
my $first_line = <FH>;
my @lines = <FH>;
但是,要注意全局重新定义Perl内置变量的风险。您可以使用local
将其仅应用于当前范围
local $/;
my $lines = <FH>;
在代码中,
my$first\u行
是标量上下文。在标量上下文中,
读取并返回一行
在数组上下文中,
将读取所有行(或耗尽内存):
my@all_line=;
上下文在Perl中是一个非常重要的概念,也是一个微妙的概念。在代码中,
我的$first\u行
是标量上下文。在标量上下文中,
读取并返回一行
在数组上下文中,
将读取所有行(或耗尽内存):
my@all_line=;
上下文在Perl中是一个非常重要的概念,也是一个微妙的概念
my @all_lines = <$in_fh>;