2011-09-07 225 views
2

我正在使用YAML :: Tiny從Perl中的文件進行寫入和讀取。不幸的是,我在使用數據以冒號結束的問題:處理YAML中的尾部冒號

my $test_message = {"hoody" => 'hoo:'}; 
my $dump = YAML::Tiny::Dump($test_message); 
my $reloaded = YAML::Tiny::Load($dump); 
print Data::Dumper::Dumper($reloaded); 

這將產生Failed to load YAML document from string at [the line with YAML::Tiny::Load]

首先,這看起來像一個錯誤。是嗎?或者我對YAML :: Tiny期待過多? (我們使用YAML :: Tiny 1.48;最新的版本是1.50,這可以確保我很快就會安裝。)

其次,有什麼辦法可以解決這個問題嗎?我試圖使用轉義字符,但我不能做正確的。我試圖用\x3A替換冒號,但是這並沒有給出所需的行爲。 (打印$dump給人的字符串返回不變[hoo\x3A], 而Data::Dumper::Dumper線使得它'hoo\\x3A')提前

感謝有這方面的幫助。

+2

此代碼適用於perl 5.12和YAML :: Tiny版本1.5.0 – ennuikiller

+0

@ennuikiller:謝謝。我會認爲升級到1.50會讓這個消失。 – BlairHippo

+0

適用於YAML。對不起,我沒有安裝YAML :: Tiny。 – hexcoder

回答

3

這個bug was fixed in 1.5 你可能會考慮使用YAML而不是YAML :: Tiny(Tiny版本應該只有它的父接口)。

我認爲任何解決方法都會讓事情變得更加糟糕,因爲在最終得到YAML :: Tiny 1.5以及錯誤修正後。我建議你在你的代碼中加入use YAML::Tiny 1.50或切換到YAML。

+1

不幸的是,由於性能原因,YAML不是一種選擇。對於我使用它,YAML :: Tiny快了43倍。 (是的,我記下了它。)而且很重要。不過,我很高興聽到這個bug已經修復。我會糾纏IT加快。 – BlairHippo

+0

@BlairHippo =>你有基準YAML :: XS嗎? –

+0

@Eric Storm:不,我沒有。 YAML :: Tiny是可用的,而將YAML :: XS安裝到需要的地方會是一件令人討厭的事。但這並不意味着這不是正確的舉措。任何想法對於Tiny而言,我應該期待的性能提升有多少? – BlairHippo