0

このように特定のフォーマットを設定するとします。出力をコピーしてファイルに入れる方法はありますか。

ps: strict を使用すると、「グローバル シンボル "$counter" には、aggregator.pl の 19 行目に明示的なパッケージ名が必要です」と表示されます。これは何が原因ですか?local を使用してスコープを定義したので、少し混乱しました。誰かが私に返事をくれることを願っています。ありがとう

enter code here

# Setup includes
# use strict;
use XML::RSS;
use LWP::UserAgent;
# Declare variables for URL to be parsed
my $url2parse;
# Get the command-line argument
my $arg = shift;
# Create new instance of XML::RSS
my $rss = new XML::RSS;
# Get the URL, assign it to url2parse, and then parse the RSS content
$url2parse = get($arg);
die "Could not retrieve $arg" unless $url2parse;
$rss->parse($url2parse);
#create arrays to hold data
my @titles;
local $counter = 0;

#open file and write .txt output to it
open my $fh, ">output.txt" or die "File creation failed: $!";

# Print the channel items
foreach my $item (@{$rss->{'items'}}) {
     $titles[$counter] = $item->{'title'};
 &format_output($item->{'title'});
 $counter++;
}
sub get { 
    my $url = shift; 
    my $ua = LWP::UserAgent->new(); 
    my $res = $ua->get($url); 
    die ("Could not retrieve $url: " . $res->status_line) unless($res->is_success); 
    return $res->content; 
} 

sub format_output {
    local($title) = @_;
    $~ = "MYFORMAT";
    write;
    print $fh @_;
}
format MYFORMAT = 

=======================
  Title :~ ^<<<<<<<<<
$title
=======================
.
4

1 に答える 1

1

writeはオプションのファイルハンドル パラメータを受け取るため、printをに置き換えることができますwrite $fh。ファイルハンドルとselectを設定するには、1 パラメータを使用する必要があります。$~STDOUT

local名前のスコープを宣言しません。スコープの開始/終了時に値を保存して復元するだけです。ourorを使用use varsして、変数のスコープを宣言します。

于 2012-04-11T04:09:52.363 に答える