2

これで、コンテンツ タイプを消費できないことがわかりました。ワークフローの実際の概要またはシナリオは次のとおりです。ワークフローは、正確に説明できるように、より正確にする必要があります。

私が間違っていることを提案してください。

use LWP::UserAgent;
use HTTP::Request::Common;
my $sendXML="INPUT.XML";
my $resultXML="RESULT.XML";
my $message = <<'XML';
<criteria>
<includeFilterSets>
        <filterSet>
            <filter>
                <filterName>PRODUCT_NAME</filterName>
                </filterSet>
    </excludeFilterSets>
    </entityToSearch>
<criteria>
XML

my $webpage="http://example.com/";
#my $webpage = HTTP::Request->new(GET => 'http/Testlocation');
my $ua = LWP::UserAgent->new; 
my $response = $ua->post($webpage, Content_Type => 'text/xml', Content => $message);
if ($response->is_success) {
    print $response->decoded_content;  # or whatever
}
else {
    #die $response->status_line;
    print $response->decoded_content;

}
4

1 に答える 1

6

無限ループを構築しました。それが、メモリ不足の警告の出所です。

my $message="test"; 
open(XML,$sendXML); 
while ("
    <includeFilterSets>
        <filterSet>
            <filter>
                <filterName>VERSION_NAME</filterName>
                <operator>
                    <name>In</name>
                </operator>
                <value>10.0u</value>
                </filter>
        </filterSet>
    </includeFilterSets>") {
} 
close XML;

これで何を達成したいのかわかりませんが、それはあなたがやりたいことではありません。このスニペットは次のことを行います。

  • $test「テスト」に設定
  • のファイル名へのファイルハンドルを開きます$sendXML
  • XML スニペットが true である限り、何もしません (これは常に当てはまるため、無限ループになります)。
  • closeに到達することはありません。

コードの残りの部分は問題ありません。

やりたいことはこれです。私はファイルハンドルのものを省きました。

my $message = <<'XML';
<includeFilterSets>
        <filterSet>
            <filter>
                <filterName>VERSION_NAME</filterName>
                <operator>
                    <name>In</name>
                </operator>
                <value>10.0u</value>
            </filter>
    </filterSet>
</includeFilterSets>
XML

my $webpage="http://example.com/";
my $ua = LWP::UserAgent->new; 
my $response = $ua->post($webpage, Content_Type => 'text/xml', Content => $message);
if ($response->is_success) {
    print $response->decoded_content;  # or whatever
}
else {
    die $response->status_line;
}

アドバイスの一言: 常にuse strictuse warningsを使用し、3 つの引数のオープンとレキシカル ファイルハンドルを見てください。これにより、あなたの人生はずっと楽になります。

于 2013-04-15T09:15:54.333 に答える