如何打印$ stopwords?它似乎是一个字符串($),但是当我打印它时,我得到:“HASH(0x8B694)”,每次运行时内存地址都会改变。
我正在使用Lingua :: StopWords,我只是想打印它正在使用的停用词,所以我肯定知道那里有什么停用词。我想打印这两个文件。
我是否需要尊重$ stopwords?
以下是代码:
use Lingua::StopWords qw( getStopWords );
open(TEST, ">results_stopwords.txt") or die("Unable to open requested file.");
my $stopwords = getStopWords('en');
print $stopwords;
我试过了:
my @temp = $stopwords;
print "@temp";
但这不起作用。救命啊!
最后注意:我知道有一个关于Lingua :: StopWords的停用词列表,但是我使用的是(en),我只想绝对确定我正在使用的停止词,所以这就是我想要的原因打印它,理想情况下我想将它打印到文件部分我应该已经知道如何做的文件。
答案 0 :(得分:7)
$
不代表字符串。它表示标量,可以是字符串,数字或引用。
$stopwords
是哈希引用。要将其用作哈希,您可以使用%$stopwords
。
使用Data::Dumper
作为打印哈希内容的快捷方式(通过引用传递):
use Data::Dumper;
...
print Dumper($stopwords);
答案 1 :(得分:3)
取消引用hashref:
%hash = %{$hashref}; # makes a copy
所以迭代键值
while(($key,$value)=each%{$hashref}){
print "$key => $value\n";
}
或(效率低但教学目的)
for $key (keys %{$hashref}){
print "$key => $hashref->{$key}\n";
}
答案 2 :(得分:2)
看看Data::Printer是Data :: Dumper的一个很好的替代品。它将为您提供漂亮的打印输出以及对象提供的方法的信息(如果您正在打印对象)。所以,每当你不知道自己得到了什么时:
use Data::Printer;
p( $some_thing );
你会惊讶于它有多么方便。
答案 3 :(得分:1)
getStopWords
返回哈希 ref - 对哈希的引用 - 因此您可以通过预先%
取消引用它。而你实际上只想要它的键,而不是它的值(都是1
),因此你可以使用keys
函数。例如:
print "$_\n" foreach keys %$stopwords;
或
print join(' ', keys %$stopwords), "\n";
你也可以跳过临时变量$stopwords
,但是你需要将getStopWords
调用包装在花括号{...}
中,这样Perl就可以知道发生了什么:
print join(' ', keys %{getStopWords('en')}), "\n";