2016-03-04 65 views
1

我想選擇數據庫以下值:獲得一個只讀值的修改的錯誤嘗試

報告將@its諸多問題之一就是最近@擴大婦女 銷售低迷(A)其 近期已經出現很多問題〜(B)其最近的許多問題已經在 〜(A) C)它的許多問題是最近的〜(D)它們的許多問題 是最近的〜(E)它們的許多問題已經在近期〜

我正在選擇的變量$疑問句這個值,然後根據下面選擇文本:

$ques=~s/^(.*?)\@(.*?)\@(.*?)$/$2/; 

現在,雖然通過

$3=~s/~/\n/g; ---->line 171 

替換〜字符的字符串和運行腳本,我得到一個錯誤爲:

Modification of a read-only value attempted at main.pl line 171 

我想要替換所有〜cha用'\ n'刪除最後的值並打印。請建議如何去做。我已經在網上研究過這個,但是對如何處理這些只讀變量感到困惑。

+0

我認爲你直接不能修改$ 3 assgn它是一個變量,然後做替換 – Nagaraju

回答

2

這聽起來像你真正想要在這種情況下split而不是正則表達式捕獲組:

my @parts = split(/@/, $ques); 
$parts[2] =~ s/~/\n/g; 

它使你的代碼的意圖更清晰因爲您實際上是在分割@符號。

+0

謝謝,我的方法錯了。使用這個,我正在得到想要的結果! – JustStarted

2

就像你說的那樣,特殊變量$1,$2等是隻讀的,這意味着你不能對它們執行替換。

表演上$ques替代會做你需要的東西:

$ques =~ s/~/\n/g; 
print $ques; 

請注意,這就是你$ques你擺脫所有的~字符進行替換較早。

+0

嗨,其實我打印輸出如下: 'print「$ 1」,colored(「$ ques」,'underline','黃色'),「$ party」,「\ n」;' 如果我在將它分開之前將其替換爲\ n,它將在下劃線中打印完整文本。 – JustStarted

3

你已經對JoséCastro的問題有了很好的解釋。但如果您使用最新版本的Perl,還有另一種解決方案(更新:已仔細檢查,我發現這意味着5.14+)。替換運算符的參數/r將複製您的字符串,在副本上進行替換,然後返回修改後的值。

所以,你可以寫:

my $new_value = $3 =~ s/~/\n/rg; 
+0

我正在使用Perl 5.10。看起來這是在執行時給出語法錯誤。 – JustStarted

+1

是的。正如我所說的,這個特性是在Perl 5.14中添加的。你爲什麼不使用這個十年發佈的Perl版本? :-) –

+0

我正在爲我個人使用的東西,但在辦公系統。所以我不能直接升級它,除非我有經理的批准。 :P – JustStarted

相關問題