所以我創建了下面這個腳本來完成一個任務,它需要一個文本文件並檢查單詞的頻率並列出出現次數最多的10個單詞。一切工作正常,但我需要此腳本能夠通過命令行以及通過標準輸入啓動。Perl - 命令行輸入&STDIN
所以我需要能夠寫'perl wfreq.pl example.txt',並且應該啓動腳本並且不要提問文本文件。我不確定如何實現這一點,我想我可能需要一個while循環,在開始的某個地方跳過STDIN,如果你在終端命令行給它的文本文件。
任何人都可以提供幫助嗎?
#! /usr/bin/perl
use utf8;
use warnings;
print "Please enter the name of the file: \n" ;
$file = <STDIN>;
chop $file;
open(my $DATA, "<:utf8", $file) or die "Oops!!: $!";
binmode STDOUT, ":utf8";
while(<$DATA>) {
tr/A-Za-z//cs;
s/[;:()".,!?]/ /gio;
foreach $word (split(' ', lc $_)) {
$freq{$word}++;
}
}
foreach $word (sort { $freq{$b} <=> $freq{$a} } keys %freq) {
@fr = (@fr, $freq{$word});
@ord = (@ord, $word);
}
for ($v =0; $v < 10; $v++){
print " $fr[$v] | $ord[$v]\n";
}
這很好,看起來像我想要的。 my $ DATA; my $ file = $ ARGV [0];如果($ file){0}打開($ DATA,$ file)或$ $!其他{ print「請輸入文件的名稱:\ n」; $ DATA = STDIN; } 我現在可以通過命令行arg來啓動它,但是當我沒有啓動它時,它只會請求文件,但從不會通過腳本的其餘部分執行排序和打印。 (與「perl wfreq2.pl example.txt」一起使用,但在使用「perl wfreq2.pl」時不能使用) – FictionFighter
不確定我在做什麼錯,但是我不能在剛開始時聲明「perl wfreq.pl「它確實要求該文件是一個STDIN,但它並沒有移動,並進行實際的排序和列表。 – FictionFighter
好吧,我更新了我的答案,我誤解了你的問題。 – 2011-10-24 10:21:27