0

この perl の問題をしばらくデバッグしようとしましたが、うまくいきませんでした。私がやろうとしているのは、接続がsocks4/5接続であるかどうかを判断することです。

# ./pctest.pl
Name "main::junk" used only once: possible typo at ./pctest.pl line 60.
Name "main::empty" used only once: possible typo at ./pctest.pl line 60.
IO::Socket::INET: Bad hostname 'C1(X'   ...propagated at ./pctest.pl line 52.

私もこのエラーが発生しました(最後に @$; を追加または死ぬ前に):

Can't use an undefined value as a symbol reference at ./pctest.pl line 56.

.

...
  $look = IO::Socket::INET->new( PeerAddr => $_, Proto => 'tcp', Timeout => 5 ) or die @$;

            $sock4 = pack( "CCS", 4, 1, 80 );

            print $look $sock4;

            read( $look, $recv, 10 );

            ( $empty, $granted, $junk ) = unpack( "C C C6", $recv );

            if( $granted == 0x5A )
            {
                    print " Yes\n";
            }
            else
            {
                    print " No\n";
            }
...
4

3 に答える 3

1

ちなみに、あなたは@$ではなく$@を考えていると思います。コードをで囲む必要があります

eval { ... };

工事。見る:

my $look;
eval { $look = IO::Socket::INET->new( PeerAddr => $_, Proto => 'tcp', Timeout => 5 ) };

if ($@) {
   do_something_with($@);
}

確かに、それは元の質問に答えません:)

于 2011-01-25T13:38:46.163 に答える
1

タイプミスがあります。@$本当にあるはず$@です。

「タイプミスの可能性」メッセージを取り除き、コードで使用されていないように見える場合は、次のように記述します$empty$junk

my @result = unpack("C C C6", $recv);

if ($result[1] == 0x5A) {
# ...
}
于 2011-01-25T13:32:33.833 に答える
0

エラー メッセージはPeerAddrIO::Socket::INET->new呼び出しのパラメーター値が無効であることを意味します。

コンストラクターは、PeerAddr値がホスト名または IP アドレス (nnn.nnn.nnn.nnn) であることを想定しています。の内容を確認する$_と、何か違うことがわかるはずです。

于 2011-01-25T23:19:19.227 に答える