【发布时间】:2017-03-03 07:21:09
【问题描述】:
我有一个脚本可以提取我目录中的所有 pm 文件并查找某些模式并将它们更改为所需的值,我尝试了 Tie::File 但它不查找文件的内容
use File::Find;
use Data::Dumper qw(Dumper);
use Tie::File;
my @content;
find( \&wanted, '/home/idiotonperl/project/');
sub wanted {
push @content, $File::Find::name;
return;
}
my @content1 = grep{$_ =~ /.*.pm/} @content;
@content = @content1;
for my $absolute_path (@content) {
my @array='';
print $absolute_path;
tie @array, 'Tie::File', $absolute_path or die qq{Not working};
print Dumper @array;
foreach my $line(@array) {
$line=~s/PERL/perl/g;
}
untie @array;
}
输出是
Not working at tiereplacer.pl line 22.
/home/idiotonperl/main/content.pm
这没有按预期工作(查看所有 pm 文件的内容),如果我尝试对我家下的某些测试文件执行相同的操作以获取单个文件,则内容将被替换
@content = ‘home/idiotonperl/option.pm’
它按预期工作
【问题讨论】:
-
你坚持使用
tie——你有什么(非常)特别的原因吗? -
否...发现这种方式很容易编辑文件中的特定行
-
我会不推荐使用
tie,除非你有非常充分的理由。我以相当标准的方式发布了如何执行您所要求的操作。告诉我进展如何。 -
@zdim:我非常不同意。
Tie::File可以让“简单的事情变得简单”。如果tie施加的开销在几毫秒或更短的数量级,那么担心它是没有意义的。 (我想那是你的反对意见?你不解释。) -
@Borodin 我并不是要讨论它的价值。这就像一个魔法。我的意思是说它不应该用于只用最基本的工具就能轻松完成的工作。它只是提高了那里的复杂性。如果 OP 使用了一个简单的循环,这个问题就不会发生。 (我应该解释一下我的意思。)我并不是要抱怨开销。正确评估是使用任何工具的一部分。
标签: perl perl-module