比如我有,如何將單引號字符串轉換爲雙引號字符串,以便它被解釋?
my $str = '\t';
print "My String is ".$str;
我想輸出解釋製表符,並返回類似:
"My String is \t"
我其實從數據庫中獲取的字符串值,並將其將其作爲單引號字符串返回。
比如我有,如何將單引號字符串轉換爲雙引號字符串,以便它被解釋?
my $str = '\t';
print "My String is ".$str;
我想輸出解釋製表符,並返回類似:
"My String is \t"
我其實從數據庫中獲取的字符串值,並將其將其作爲單引號字符串返回。
$ perl -MString::Interpolate=interpolate -E 'say "My String is [". interpolate(shift) . "]"' '\t'
My String is [ ]
'\t'
和"\t"
是字符串文字,的產生串( 「\」, 「t」 和分別製表符)Perl代碼塊。數據庫不返回Perl代碼,所以用單引號文字和雙引號文字來描述問題是沒有意義的。你有一個字符串,句號。
該字符串由字符「\」和「t」組成。您想要將該字符序列轉換爲製表符。這是一個簡單的替代。
s/\\t/\t/g
我想你不想只處理\t
。您可以創建一個序列表。
my %escapes = (
"t" => "\t",
"n" => "\n",
"\" => "\\",
);
my $escapes_pat = join('', map quotemeta, keys(%escapes));
$escapes_pat = qr/[$escapes_pat]/;
s/\\($escapes_pat)/$escapes{$1}/g;
你可以跟隨的perlfaq4答案技術How can I expand variables in text strings?:
如果你能避免它,不這樣做,或者你可以使用一個模板系統,如文字: :模板或模板工具包,做這件事。你甚至可以把工作用的sprintf或printf的實現:
my $string = sprintf 'Say hello to %s and %s', $foo, $bar;
但是,對於一次性簡單的情況下,我不希望拿出一個完整的模板系統,我將使用有兩個Perl標量變量的字符串。在這個例子中,我想擴大$ foo和$酒吧的變量的值:
my $foo = 'Fred';
my $bar = 'Barney';
$string = 'Say hello to $foo and $bar';
的一種方式,我可以做到這一點涉及到替代運營商和雙/ E標誌。第一個/ e評估替換端的$ 1,並將其變爲$ foo。第二個/ e以$ foo開頭並用它的值替換它。 $ foo的話,變成「弗雷德」,這是最後什麼字符串中左起:
$string =~ s/(\$\w+)/$1/eeg; # 'Say hello to Fred and Barney'
的/ E也將忽略這些違規行爲的嚴格,用空字符串替換未定義的變量名。由於我使用了/ e標誌(甚至是兩次!),所以我在eval的字符串表單中遇到了同樣的安全問題。如果$ foo中存在某些奇怪的東西,可能類似於@ {[system「rm -rf /」]},那麼我可能會陷入麻煩。
爲了解決安全問題,我也可以從哈希中提取值而不是評估變量名稱。使用單個/ e,我可以檢查散列以確保值存在,如果不存在,我可以用標記替換缺失的值,在這種情況下?以表明我錯過了一些東西:
my $string = 'This has $foo and $bar';
my %Replacements = (
foo => 'Fred',
);
# $string =~ s/\$(\w+)/$Replacements{$1}/g;
$string =~ s/\$(\w+)/
exists $Replacements{$1} ? $Replacements{$1} : '???'
/eg;
print $string;
記住:Perlfaq是你的朋友(幾乎和你一樣!)。 – 2011-04-05 06:55:18
嗯,我只是嘗試了下面的解決方法它的工作。請看看
my $str1 = "1234\n\t5678";
print $str1;
#it prints
#1234
# 5678
$str1 =~ s/\t/\\t/g;
$str1 =~ s/\n/\\n/g;
print $str1;
#it prints exactly the same
#1234\n\t5678
單引號或雙引號是源代碼中發生的事情。數據庫不會返回源代碼,因此數據庫無法「將其返回爲單引號字符串」。你的數據庫返回什麼?由反斜槓和「t」組成的雙字符字符串?或者它返回一個由製表符組成的單字符字符串? – tadmc 2011-04-05 02:20:50