2012-04-11 48 views
0

如果我們設置一個這樣的指定格式。有什麼辦法可以複製輸出並將其放入文件中。把格式化的輸出放在一個文件中,perl格式

PS:當我使用嚴格的,它顯示「全局符號‘$計數器’需要明確包名在aggregator.pl第19行」。這是什麼造成的?我用本地來定義它的範圍,所以我有點困惑。希望有人能給我一個迴應。 THX很多

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 
======================= 
. 

回答

1

write帶有一個可選的文件句柄參數,所以你可以用write $fh更換print。你需要爲了設置$~爲您的文件句柄以及爲STDOUT使用1參數select

local不聲明名稱的範圍,它只是保存和恢復上的範圍進入/退出的值。使用ouruse vars來聲明變量的作用域。

+1

不錯!你真的幫我過。非常感謝 – 2012-04-11 04:50:39

+1

使用'our'而不是'vars',現在被認爲是_obsolete_。 – 2012-04-11 06:04:01

+0

@rainzwr就這麼預期,你將通過點擊勾選只是答案的左邊的「接受」正確的答案。這標誌着它爲未來的讀者,並獎勵答覆的答覆者。 – 2012-04-11 06:33:40