为什么这样做:
$my_str=~s/://g;
但这不是:
$my_str=~s/:://g;
我的字符串看起来像这样:::this:is:my:string
我需要删除::
但不要触及:
。
答案 0 :(得分:12)
对我来说很好:
$ echo "::this:is:my:string" | perl -ne "s/:://g; print;"
this:is:my:string
答案 1 :(得分:4)
您确定代码中没有拼写错误吗?而这种替换实际上是问题所在?以下程序适合我:
my $var = '::a:b:c::';
print "$var\n";
$var =~ s/:://g;
print "$var\n";
输出:
$ perl test.pl
::a:b:c::
a:b:c
$
编辑以添加一些建议:
答案 2 :(得分:3)
我能想到的两件事会导致$my_str =~ s/:://g;
失败:
$my_str
不包含您所说的内容。pos($my_str)
已设置。为确保$my_str
包含您认为的功能,您可以使用Data::Dumper,但请务必在使用$Data::Dumper::Useqq = 1;
之前执行Dumper
。
但首先,请确保您没有做类似
的事情if ($my_str =~ /.../g) {
...
$my_str =~ s/:://g;
...
}
if ($my_str =~ /.../g)
是一个常见错误,它可能会导致此问题。 (我不知道为什么,因为它在概念上甚至没有意义。)如果是这样,请摆脱g
条件中的if
。