2012-09-14 48 views
1

如何从str中删除斜杠?需要perl上的解决方案。 我试图如何从str中删除斜杠?

 ($phot) = $photos =~ s/\///g; 

但它不工作

+6

“它不工作” 不是从Perl的诊断消息。究竟发生了什么?你期望会发生什么? – mob

回答

10

在Perl中s///运营商修改字符串中,你将它应用于;所以,你应该写:

my $phot = $photos; 
$phot =~ s/\///g; 

,或者更简洁:

(my $phot = $photos) =~ s/\///g; 

在最近版本的Perl,有一个标志/r,您可以使用,以获得行为更像你在做什么期待:

my $phot = ($photos =~ s/\///gr); 

但你必须检查你的Perl版本是否有它。 (您可以运行perl -v看你有没有这个功能是在Perl v5.14.0推出什么版本的Perl。)


编辑补充:作为amon指出的评论,Ωmega意味着他/她的回答,s///操作员允许使用除/以外的分隔符;因此,举例来说,任何这些将工作:

(my $phot = $photos) =~ s{/}{}g; 
(my $phot = $photos) =~ s#/##g; 
(my $phot = $photos) =~ s'/''g;  # note: prevents variable interpolation 
(my $phot = $photos) =~ s-/--g; 

其中一个可能比写s/\///g更加清晰。 (这取决于你。)

这种自由选择你的分隔符是真的所有的引用类运算符;例如,"x"也可以写成qq{x}qq/x/qq-x-。有关更多信息,请参阅"Quote and Quote-like Operators" in the perlop man-page

+0

另外,'s/\ ///'是可怕的并且有资格处理混淆代码。使用不同的分隔符,例如'{/} {}'可以使正则表达式更易于阅读。 – amon

+0

@amon:我认为“horrid”和“obfuscated”有点夸张,但你是对的,不同的分隔符可能更易于阅读。我相应地更新了我的答案。 – ruakh

+0

我相信正确的描述是“牙签综合症”。 – TLP

0
(my $phot = $photos) =~ s#/##g; 

(my $phot = $photos) =~ s{/}{}g;