簡體   English   中英

如何在Perl中打印哈希?

[英]How do I print a hash in perl?

如何打印$ stopwords? 它似乎是一個字符串($),但是當我打印它時,我得到:“ HASH(0x8B694)”,每次運行時內存地址都會改變。

我正在使用Lingua :: 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),我只想確保自己使用的是停用詞,所以這就是為什么我要打印它的原因理想情況下,我想將其打印到文件中,我應該已經知道該怎么做。

$並不表示字符串。 它表示標量,可以是字符串,數字或引用。

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

使用Data::Dumper作為打印哈希內容的快速方法(按引用傳遞):

use Data::Dumper;
...
print Dumper($stopwords);

取消引用hashref:

%hash = %{$hashref};  # makes a copy

所以要遍歷鍵值

while(($key,$value)=each%{$hashref}){
    print "$key => $value\n";
}

或(效率較低但具有教學目的)

for $key (keys %{$hashref}){
    print "$key => $hashref->{$key}\n";
}

看一下Data :: Printer ,它是Data :: Dumper的不錯替代品。 它將為您提供打印精美的輸出,以及有關對象提供的方法的信息(如果要打印對象)。 因此,每當您不知道所擁有的內容時:

use Data::Printer;
p( $some_thing );

您會感到如此便捷,您會感到驚訝。

getStopWords返回一個哈希引用 (對哈希的引用),因此您可以通過在%前面getStopWords來取消引用。 而且您實際上只想要它的鍵,而不是它的值(全為1 ),因此您將使用keys函數。 例如:

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

要么

print join(' ', keys %$stopwords), "\n";

您也可以跳過臨時變量$stopwords getStopWords ,但是您需要將getStopWords調用包裝在大括號{...}以便Perl可以知道發生了什么:

print join(' ', keys %{getStopWords('en')}), "\n";

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM