2009-07-16 39 views
0

cookie_jar方法使用している間、私はこのエラーを取得する:ここでLWP :: UserAgent-> new()から定義された値を取得できないのはなぜですか?

Can't call method cookie_jar on an undefined value 

は私のコードです:

my $cookie_jar= new HTTP::Cookies; 
my $ua=new LWP::UserAgent; 
my %cookies= fetch CGI::Cookie; 
my $encoded=$cookies{'SCred'}; 
$cookie_jar->set_cookie(1, "SCred", $encoded, "/", $SSO_DOMAIN, "", 0, 0, 60*60, 0); 
$ua->cookie_jar($cookie_jar); # I get error on this line 

私はこのエラーを取得する理由を任意のアイデア?

+0

間接オブジェクト表記法を使用していない場合でも問題はありますか?つまり、 'new LWP :: UserAgent'ではなく' LWP :: UserAgent-> new'です。 –

+0

はい。間接的なオブジェクト記法を使用した後でも問題はまだ残っています –

+3

完全な出力と一緒に失敗する完全なスクリプトを投稿できますか? – Inshallah

答えて

6

私は(厳密に、警告と私は文字列に自由変数を回して、必要なモジュールだと思うと)あなたのコードを試してみた:

[email protected] ~[home*]$ cat x.pl 
use strict; 
use warnings; 
use HTTP::Cookies; 
use LWP::UserAgent; 
use CGI::Cookie; 

my $ua   = new LWP::UserAgent; 
my %cookies = fetch CGI::Cookie; 
my $encoded = $cookies{'SCred'}; 

my $cookie_jar = new HTTP::Cookies; 
$cookie_jar->set_cookie(
    1, "SCred", '$encoded', 
    "/", '$SSO_DOMAIN', "", 
    0, 0, 60*60, 0 
); 
$ua->cookie_jar($cookie_jar); 

print "ua: ",$ua,"\n"; 
print "ua->cookie_jar: ",$ua->cookie_jar,"\n"; 
[email protected] ~[home*]$ perl x.pl 
ua: LWP::UserAgent=HASH(0x82f8cc8) 
ua->cookie_jar: HTTP::Cookies=HASH(0x82f8b84) 
[email protected] ~[home*]$ 

、それが動作します。完全な例を投稿するか、 '$ ua = new ...'行と '$ ua-> cookie_jar'行の間に行があり、$ uaが再割り当てされるか、またはundefに設定されることがあります。 Cookie_jarの呼び出しの直前に '$ ua'の値を表示すると、undefであることがわかります。最初の割り当てとそのメソッドを呼び出す場所の間のどこかにリセットされている必要があります。

4

ただ、次のことを試して、任意の奇妙な相互作用を排除する:

my $cookie_jar = HTTP::Cookies->new; 
my $ua = LWP::UserAgent->new; 
my %cookies = CGI::Cookie->fetch; 
my $encoded = $cookies{'SCred'}; 
$cookie_jar->set_cookie(
    1, "SCred", $encoded, "/", $SSO_DOMAIN, "", 0, 0, 60*60, 0 
); 
$ua->cookie_jar($cookie_jar); # I get error on this line 

は、何らかの理由で、$uaは、コンストラクタの呼び出しを意味し、未定義である:

my $ua = LWP::UserAgent->new; 

に失敗しました。私はfastcgiにあまり慣れていません。しかし、LWP::UserAgentは、コンストラクターの失敗にうっかりかかります。問題の行にどのように到達しているのか分かりません。

サーバーログを確認しましたか?暗闇の中のトータルショット:以下は、有用な情報をエラーログに追加しますか?

my $ua = eval { LWP::UserAgent->new } 
    or warn "LWP::UserAgent->new failed: [email protected]"; 
1

これが実際のエラーであれば、cookie_jarでは問題ありません。それはちょうどあなたが呼び出そうとする最初の方法です。ユーザーエージェントを作成するときに実際にオブジェクトを取得することを確認してください。

は、すべてのクッキーのものを削除し、agent方法試してください:何かがコンストラクタでうまくいかない場合は、あなたがそれをキャッチすることができるはず

use strict; 
my $ua = eval { LWP::UserAgent->new } 
    or die "Could not make user-agent! [email protected]"; 
$ua->agent("TestAgent"); 

を。しかし、あなたのスクリプトがまだ死んでいないならば、あなたは何か間違っていると思います。 LWP :: UserAgent :: newが問題に遭遇した場合、それはすでにうまくいきます。それが返すことができるのは、すでにメソッドを呼び出した定義済みの値だけです。

関連する問題