如何将其打印到文件而不是Perl程序中的屏幕?

如何将其打印到文件而不是Perl程序中的屏幕?,perl,Perl,我使用的示例如下: 如何让它使用我的$document,删除停止字并将结果打印到文件中?在这里查看我的代码: open(FILESOURCE, "sample.txt") or die("Unable to open requested file."); my $document = <FILESOURCE>; close (FILESOURCE); open(TEST, "results_stopwords.txt") or die("Unable to open request

我使用的示例如下:

如何让它使用我的
$document
,删除停止字并将结果打印到文件中?在这里查看我的代码:

open(FILESOURCE, "sample.txt") or die("Unable to open requested file.");
my $document = <FILESOURCE>;
close (FILESOURCE);

open(TEST, "results_stopwords.txt") or die("Unable to open requested file.");

use Lingua::StopWords qw( getStopWords );
my $stopwords = getStopWords('en');

print join ' ', grep { !$stopwords->{$_} } $document;

基本上,我如何读入文档,删除停止词,然后将结果写入新文件?

在您的程序中,您忘记将输入文本标记为单词。
Lingua::EN::Splitter::words
的一个简单替代方法是将空格上的一行放入一个单词列表(大约)

考虑到用户的评论,此程序适合作为Unix筛选器

use strictures;
use Lingua::StopWords qw(getStopWords);
use Lingua::EN::Splitter qw(words);
my $stopwords = getStopWords('en');
while (defined(my $line = <>)) {
    print join ' ', grep { !$stopwords->{$_} } @{ words $line };
}
使用狭窄;
使用Lingua::StopWords qw(getStopWords);
使用Lingua::EN::Splitter qw(单词);
my$stopwords=getStopWords('en');
while(已定义(my$line=)){
打印联接“”,grep{!$stopwords->{$}}@{words$line};
}

您需要打开文件进行写入。使用警告并检查打印是否成功,您将看到(例如,打印…或死亡…)。请,请,请输入文件名和$!在错误消息中。shell重定向有什么问题?这是做这类事情的正常方式。在程序中硬编码输入和输出路径可能没有意义。这就是stdin(或ARGV)和stdout的用途。别忘了关闭文件并检查它是否成功。我们的编辑重叠了。让我们最好保持这种方式,编译器优化是最新的,不包括更复杂的表达式;我希望代码对复制粘贴编程具有健壮性。
print join ' ', grep { !$stopwords->{$_} } TEST;


print TEST join ' ', grep { !$stopwords->{$_} } @words;
use strictures;
use Lingua::StopWords qw(getStopWords);
use Lingua::EN::Splitter qw(words);
my $stopwords = getStopWords('en');
while (defined(my $line = <>)) {
    print join ' ', grep { !$stopwords->{$_} } @{ words $line };
}