簡體   English   中英

Perl:字符串不轉義反斜杠

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM