【发布时间】:2015-01-25 21:00:47
【问题描述】:
我想知道当使用选项perl -pi -e 执行时,Perl 运行的等效代码是什么?
在一些 SO 问题上,我可以阅读:
while (<>) {
... # your script goes here
} continue {
print;
}
但是这个例子没有显示文件保存的部分。
Perl 如何确定 EOL?没有发生更改时它会触摸文件吗?例如,如果我有一个旧的 MAC 文件(仅限\r)。 s/^foo/bar/gm是怎么处理的?
我尝试使用 Perl 调试器,但它并没有真正的帮助。所以我只是想猜测:
#!/usr/bin/env perl
my $pattern = shift;
map &process, @ARGV;
# perl -pi -e PATTERN <files>...
sub process {
next unless -f;
open my $fh, '<', $_;
my $extract;
read $fh, $extract, 1024;
seek &fh, 0, 0;
if ($extract =~ /\r\n/) {
$/ = "\r\n";
} elsif ($extract =~ /\r[^\n]/) {
$/ = "\r";
} else {
$/ = "\n";
}
my $out = '';
while(<&fh>) {
my $__ = $_;
eval $pattern;
my $changes = 1 if $_ ne $__;
$out .= $_;
}
if($changes)
{
open my $fh, '>', $_;
print $fh $out;
}
close &fh;
}
【问题讨论】:
标签: perl