【问题标题】:How do I print a hash in perl?如何在 perl 中打印哈希?
【发布时间】:2012-10-23 12:29:28
【问题描述】:

如何打印 $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),我只想确定我使用的是哪些停用词,这就是我想要的原因打印它,理想情况下我想将它打印到一个我应该已经知道如何做的文件部分。

【问题讨论】:

    标签: string perl hash dereference


    【解决方案1】:

    看看 Data::Printer 作为 Data::Dumper 的一个不错的替代品。它将为您提供漂亮的打印输出以及有关对象提供的方法的信息(如果您正在打印对象)。因此,当您不知道自己拥有什么时:

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

    你会惊讶于它的方便程度。

    【讨论】:

      【解决方案2】:

      取消引用 hashref :

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

      所以迭代键值

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

      或(效率较低但具有教学目的)

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

      【讨论】:

        【解决方案3】:

        getStopWords 返回一个散列ref — 对散列的引用 — 因此您可以通过添加 % 来取消对它的引用。而且您实际上只想要它的键,而不是它的值(都是1),因此您将使用keys 函数。例如:

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

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

        您也可以跳过临时变量$stopwords,但是您需要将getStopWords 调用包装在花括号{...} 中,这样Perl 才能知道发生了什么:

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

        【讨论】:

          【解决方案4】:

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

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

          使用Data::Dumper 作为打印散列内容的快速方法(通过引用传递):

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-09-30
            • 2016-12-18
            • 2011-01-26
            • 1970-01-01
            • 2011-10-27
            • 1970-01-01
            • 1970-01-01
            • 2012-07-22
            相关资源
            最近更新 更多