【发布时间】:2014-04-16 05:40:17
【问题描述】:
我是 Perl 的新手,所以请原谅我。我正在尝试做的是使用一些外部程序的执行将匹配的字符串转换为替换的字符串。我已经尝试使用它并且它可以工作,除了替换字符串后面包含我不想要的换行符:
perl -i'' -e '$from = "C"; $to = "00"; $match = "(" . $from . "[23456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{27,35})";' -pe 's/$match/`base58ChecksumEncode "$to\$(base58Converter -d $1 | cut -c 3- | rev | cut -c 9- | rev | cut -c 3-)"`/eg;' file1.txt
但是,当我尝试将其转换为适用于所有文件的脚本时,从 pwd 递归地删除文件的所有内容。我不知道为什么。以下是我整理的脚本内容。
#!/usr/local/bin/perl
use strict;
use warnings;
use autodie;
use File::Find;
die "Usage: $0 From_Character_Prefix To_Hex_Prefix\n" if @ARGV != 2;
my ($from, $to) = @ARGV;
$ENV{LD_LIBRARY_PATH}='/usr/local/lib';
finddepth(sub {
return if $File::Find::dir =~ /.git\b/;
if (-f) {
local @ARGV = $_;
local $^I = '.bak';
while (<>) {
my $match = "(" . $from . "[23456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{27,35})";
s/$match/`base58ChecksumEncode "$to\$(base58Converter -d $1 | cut -c 3- | rev | cut -c 9- | rev | cut -c 3-)"`/eg;
}
}
}, '.');
【问题讨论】:
-
在测试代码之前,切勿使用裸
-i开关。 -
您需要打印;在你的 while()
-
[23456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]最好写成[2-9A-Za-z]。