2017-10-05 87 views
-3

例如,Perl:如何傳入一個輸入而不被替換s替換///運算符?

$ test =「abc」;
$ test =〜s/b // g;

通常測試將交流。我如何操縱字符串「abc」,以便它將通過此​​測試並仍然返回abc。

我想做一個命令注入,所以我不能改變$測試=〜s/b // g;但可以改變輸入。

希望這是有道理的。

+0

我建議你閱讀了傳統的出發點,珀爾https://perldoc.perl.org/perlre.html開始「基礎知識」 - 它涵蓋了這一點,並有更多有用的東西。 –

+0

目前還不清楚你在問什麼。您可能會問以下其中一種情況:如何執行替代操作,同時保留結果中匹配項的一部分,或者如何與無替換項匹配,或者如何執行替換以使效果顯示在新的目標變量中而不是原來的目標。 – DavidO

+0

'pos($ test)= length($ test);' – ikegami

回答

1

你想使用/ r修飾符。這是一個new'ish功能,因此舊版本將無法運行它

$test = "abc"; 
my $str= $test =~ s/b//gr; 

http://perldoc.perl.org/perlre.html#Modifiers

+0

假設我們不能只更改字符串abc。我們將如何做到這一點? – user5454895

+0

打印「失敗」,除非$ test =〜s/b // g; – hoffmeister

+0

@ user5454895目前還不清楚你的意思。你不能改變字符串 - 它是一個字面值 - 你的意思是你想要避免改變字符串分配的變量,如果它等於'abc',但很樂意在其他情況下改變它?或者'abc'只是一個例子,你不想在測試它時改變字符串而不管它的值是什麼?純英語的規則究竟是什麼? –

0

沒有字符串可以傳遞給s/b//g,這將導致包含b的字符串。

但是,如果您有權訪問$test而不僅僅是它的值,則可以設置它的pos,以便替換運算符不會找到任何內容。

$ perl -e' 
    my $test = "abc"; 
    pos($test) = length($test); 
    $test =~ s/b//g; 
    CORE::say($test); 
' 
ac