2013-05-13 182 views
0

上運行Perl腳本,當我嘗試我的第二臺計算機上運行腳本,我得到這個消息:不能其他計算機

 
malformed JSON string, neither array, object, number, string or atom, at character offset 0 
(before "LWP will support htt...") at iptest.pl line 21, line 2. 

在我的第一臺電腦,腳本工作正常。

線21:

my $data = decode_json($resp->content); 

有誰知道問題可能是什麼?

在此先感謝

+1

顯示我們代碼的其餘部分將是我們一個很大的幫助。 – jwodder 2013-05-13 01:35:00

+0

我把其餘的...... – 2013-05-13 01:36:57

+0

從'STDIN'讀取時,你必須'chomp'你的變量去除換行符。 'chomp(我們的$ qve = );'我想你可以使用'my'而不是'our'。 – 2013-05-13 01:43:35

回答

3

我有點驚訝JSON錯誤是你得到的唯一錯誤。但它確實包含了一點小小的提示:「LWP將支持htt ...」。我敢打賭,LWP缺少一個需要能夠進行https連接的模塊。你現在有兩種選擇:

  1. print $response->content看到完整的錯誤信息。
  2. 在命令行上,執行諸如lwp-request https://google.com/之類的操作。你應該看到完整的錯誤信息。

然後安裝缺少的模塊。

,當然還有:請,請,請:

  • use strictuse warnings
  • 清潔該腳本,丟了每一個use直插你並不需要:IO ::插座,LWP: :簡單,YAML :: Tiny。
  • 閱讀您實際使用的模塊的文檔。你想用LWP::UserAgent->new(keep_alive)實現什麼目標?提示:這不會引用keep_alive
+0

我得到這個是缺少的模塊:@ubuntu:〜/ Desktop $ lwp-request https://google.com/ 如果安裝了LWP :: Protocol :: https模塊 ,LWP將支持https URL。 但是由於某種原因它可以不被安裝 – 2013-05-13 09:37:41

+0

我得到這個錯誤:在這個命令中失敗: GAAS/LWP-Protocol-https-6.04.tar.gz:make_test NO – 2013-05-13 09:43:14

+0

如果這是在Ubuntu上,你可以簡單地安裝'liblwp-protocol-https-perl'軟件包。 – innaM 2013-05-13 10:09:32

2

的一些問題:

  1. 始終使用use strict; use warnings;
  2. 千萬不要使用$response->content。它返回的是無用的。相反,使用$response->decoded_content(charset => 'none')
  3. 您需要chomp您從STDIN獲得的值。
  4. 除非強制(例如our @ISA = ok),否則絕對不能使用our。應該使用my
  5. my $format = '$format'; "$format"是寫作的一種愚蠢的方式"\$format"
+0

好的,但它沒有問題。因爲腳本在我的另一臺計算機上正常工作。有人可以在他的電腦上試用它並告訴我結果嗎? – 2013-05-13 02:35:38

+0

@MilosLazovic:您是否嘗試過這些建議,或者是因爲腳本碰巧在一臺計算機上工作而解僱他們?你真的想解決這個問題嗎? – siride 2013-05-13 02:37:48

+0

我嘗試了..它並沒有解決問題只是使新.. – 2013-05-13 02:50:14

1

我應用了ikegami建議的大部分更改。然後perl給了我很好的錯誤信息來解決剩下的問題。它現在看起來很有效。不要問爲什麼它以前沒有工作。你的代碼很奇怪,很難說出錯的是什麼。嚴格和警告你不得不寫更好的代碼。也許添加一些很好的命名子程序來增加更多的清晰度。

#!/usr/bin/perl 
use strict; 
use warnings; 
use IO::Socket; 
use LWP::UserAgent; 
use open qw(:std :utf8); 
use LWP::Simple; 
use YAML::Tiny; 
use JSON; 
use URI; 
use List::MoreUtils qw(uniq); 

print "Enter Qve:"; 
my ($qve, $loc, $key, $href); 
chomp($qve = <STDIN>); 
print "Enter Location:"; 
chomp($loc = <STDIN>); 

$key = ''; 
my $format = '$format'; 
$href = 
"https://api.datamarket.azure.com/Bing/Search/v1/Web?Query='$qve [loc:$loc]'&Latitude=43&Longitude=19&$format=JSON"; 
my $ua = LWP::UserAgent->new('keep_alive'); 
$ua->credentials("api.datamarket.azure.com" . ':443', '', '', $key); 
my $resp = $ua->get($href); 
my $data = decode_json($resp->decoded_content(charset => 'none')); 
my @urls = map { $_->{'Url'} } @{ $data->{d}->{results} }; 

my @za; 
for my $i (0 .. $#urls) { 
    my $trz = "www."; 
    my $host = URI->new($urls[$i])->host; 
    $host =~ s/$trz//g; 
    push(@za, $host); 
} 
+0

這是該代碼版本的乾淨版本,但決不是正確的版本。 – innaM 2013-05-13 08:26:46

+0

仍然不適用於我:格式不正確的JSON字符串,無論數組,對象,數字,字符串還是原子,在字符偏移0(在「LWP將支持htt ...之前」)在iptest.pl行26,第2行。 – 2013-05-13 09:32:15

1

爲了記錄在案,這個固定的問題,我(CentOS的):

#百勝安裝Perl的地穴-SSLeay的

+0

因爲我沒有使用yum軟件包,所以我做了「cpan Crypt :: SSLeay」來解決這個問題。 – 2017-10-03 23:27:10

相關問題