2012-09-14 114 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;