[英]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.