2013-01-12 61 views
5

我似乎無法正確使用JSON::XS的OO接口。一個錯誤以下嘎嘎叫着我無法追蹤:JSON :: XS「Usage」croak

use JSON::XS; 
my $array = ['foo', 'bar']; 

my $coder = JSON::XS->new->utf8->pretty; 
print $coder->encode_json($array); 

這嘎嘎叫着下列要求:Usage: JSON::XS::encode_json(scalar) at test.pl line 5.我已經通過代碼進行梳理和JSON::XS我不能找到一個「用法:」任何地方的警告。我的用法似乎與文檔中的示例非常匹配。任何人都可以告訴我我哪裏出了問題?

回答

10

JSON::XS有兩個接口:功能和OO。

  • 在功能界面中,功能名稱爲encode_json
  • 在OO接口中,該方法僅爲encode,而不是encode_json

以下兩個片段的兩個工作:

# Functional     | # OO 
------------------------------+----------------------------------------- 
           | 
use JSON::XS;     | use JSON::XS; 
my $array = ['foo', 'bar']; | my $array = [ 'foo', 'bar' ]; 
           | 
print encode_json($array); | my $coder = JSON::XS->new->utf8->pretty; 
           | print $coder->encode($array); 
           | 
# ["foo","bar"]    | # [ 
           | # "foo", 
           | # "bar" 
           | # ] 
+0

的OO版本@ array'和'$ array'之間'混淆(和陣列參考分配給'@ array') – Borodin

+0

@Borodin :斑點...固定 – Zaid

+0

感謝您回答這個問題!我想知道爲什麼作者不只是使用一個方法名稱,並檢查第一個參數是否是JSON :: XS引用... –