String 如何在perl中打印哈希?

String 如何在perl中打印哈希?,string,perl,hash,dereference,String,Perl,Hash,Dereference,如何打印$stopwords?它似乎是一个字符串($),但当我打印它时,会得到:“HASH(0x8B694)”,每次运行时内存地址都会发生变化 我正在使用Lingua::StopWords,我只想打印它正在使用的StopWords,这样我就可以确定有哪些StopWords。我想把这两个打印成一个文件 我需要遵守$stopwords吗 代码如下: use Lingua::StopWords qw( getStopWords ); open(TEST, ">results_stopwords

如何打印$stopwords?它似乎是一个字符串($),但当我打印它时,会得到:“HASH(0x8B694)”,每次运行时内存地址都会发生变化

我正在使用Lingua::StopWords,我只想打印它正在使用的StopWords,这样我就可以确定有哪些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),我只想绝对确定我使用的是什么停止词,所以这就是为什么我想打印它,理想情况下我想打印到一个我应该已经知道如何做的文件部分的文件中。

要取消对hashref的引用:

%hash = %{$hashref};  # makes a copy
所以要迭代键和值

while(($key,$value)=each%{$hashref}){
    print "$key => $value\n";
}
或者(效率较低,但目的是说教)


$
并不表示字符串。它表示标量,可以是字符串、数字或引用

$stopwords
是哈希引用。要将其用作哈希,可以使用
%$stopwords

使用
Data::Dumper
快速打印散列的内容(按引用传递):


getStopWords
返回一个hashref(对散列的引用),因此您可以通过在
%
前面加上前缀来取消对它的引用。实际上,您只需要它的键,而不需要它的值(它们都是
1
),因此您可以使用
功能。例如:

print "$_\n" foreach keys %$stopwords;

您还可以跳过临时变量
$stopwords
,但随后需要将
getStopWords
调用包装在花括号中
{…}
,这样Perl就可以知道发生了什么:

print join(' ', keys %{getStopWords('en')}), "\n";
看看作为Data::Dumper的一个很好的替代品。它将为您提供漂亮的打印输出以及对象提供的方法信息(如果您正在打印对象)。所以,当你不知道自己拥有什么时:

use Data::Printer;
p( $some_thing );
你会惊讶于它的便利性

print join(' ', keys %$stopwords), "\n";
print join(' ', keys %{getStopWords('en')}), "\n";
use Data::Printer;
p( $some_thing );