#tf.pl
#!/usr/local/bin/perl
use Util;
$file = shift;
$text = `cat $file`;
my @words = split_words ($text);
my @words = lc_words (@words);
my %count = count_hash(@words);
while (my ($w, $c) = each %count) {
print "$w\t$c\n";
$df{$w} = 1;
}
Run Code Online (Sandbox Code Playgroud)
我在网站上遇到了这些代码.在第3行$ file中给出了命令行参数提供的文件的名称(如果我错了,请纠正我,我是Perl新手)
在第4行,您会看到:
$text = `cat $file`;
Run Code Online (Sandbox Code Playgroud)
我想知道这条线到底做了什么?我知道cat filename在终端显示文件的内容(再次,如果错误,请纠正我.Linux菜鸟也是如此)
我在IRC问过这个问题并且有人说这是做某事的坏方法,但我真的想知道这比做什么更好,而不是知道更好的选择
它cat在命名文件上运行命令($file由Perl在命令行中展开,而不是在shell中展开)并捕获字符串中的输出.这是将文件内容篡改为单行Perl代码中的变量的一种方式(不是特别有效的方式).
处理此问题的另一种方法是使用File::SlurpCPAN上的模块或其中一个亲戚,但也可以使用简单的Perl函数中的更多代码行来完成.理想情况下,您只需编写一次该函数并重复使用它(有人已经使用File :: Slurp为您执行了此操作).
如果脚本文件名为'xx.pl'(或者有一个文件'xx.pl'),则此代码有效.
#!/usr/bin/env perl
use strict;
use warnings;
sub slurp
{
my($file) = @_;
open my $handle, '<', $file or return undef;
local $/ = undef;
my $content = <$handle>;
close $handle;
return $content;
}
my $content = slurp("xx.pl");
print $content;
Run Code Online (Sandbox Code Playgroud)