[英]Perl: Strings not escaping backslashes
如此簡單的陳述我無法理解我在做錯什么。 問題發生在網上:
$this->_validate_hash($hashref->{$key}, $schemaref->{$key}, $path . (ref($hashref->{$key}) ? $key . "/" : "\\\\\\@$key"), $errors);
所以我希望事情以/path/to/some/\\@attribute
結尾。 但是,我現在得到的是path/to/some/\\\\@attribute
。 我在最后一部分嘗試了各種組合,包括'\\\\' . '@' . $key
'\\\\' . '@' . $key
'\\\\' . '@' . $key
或'\\@' . $key
'\\@' . $key
或'\\\\@' . $key
'\\\\@' . $key
但是我仍然無法逃脫反斜杠。 這是我不知道的perl字符串中的一些古怪嗎? 謝謝。
這不是一個簡單的聲明; 它分為兩行,包含各種內容。 可以達到相同的結果,正如我所看到的(並假設$xpath
在腳本的其他地方未使用):
my $xpath = $path . (ref($hashref->{$key}) ? $key . "/" : "\\\@$key");
$this->_validate_hash($hashref->{$key}, $schemaref->{$key}, $xpath, $errors);
但是,它更具可讀性-仍然不是特別容易,但是比原始版本更具可讀性。
您的問題孩子似乎可以減少為:
use strict;
use warnings;
my $key = "attribute";
my $path = "/path/to/some/";
my $localpath = $path . "\\\@$key";
print "Key: $key\n";
print "Path: $path\n";
print "Local: $localpath\n";
該代碼可以正常工作:
Key: attribute
Path: /path/to/some/
Local: /path/to/some/\@attribute
因此,要么我有一個不同的Perl(在Linux x86 / 64上是5.12.1),要么您的設置有所不同。 鑒於我們沒有所有的哈希等,因此很難理解-但是您應該以類似的方式解決問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.