【问题标题】:Piping Perl Commands?管道 Perl 命令?
【发布时间】:2023-03-23 16:54:01
【问题描述】:

我目前正在尝试使用我的程序并让它接受用户输入,通常是一个文本文件,然后调用一个外部脚本来计算单词。我正在处理的脚本本质上是一个“中间人”,我正在尝试更熟悉到外部脚本/命令的管道。它目前没有正确执行单词计数器脚本。代码如下:

我仍然收到 ./word_counter.pl 的错误消息:“glue.pl 中没有这样的文件或目录(您在此处看到的脚本)”。

#!usr/bin/perl
use warnings;
use strict;
use IO::Handle qw();

open (PIPE_TO, "|-", "./word_counter.pl");
While(<>)
{
$PIPE_TO -> autoflush(1);
print PIPE_TO $_;

}

【问题讨论】:

  • 摆脱明显的语法错误将是一个开始。

标签: perl unix piping


【解决方案1】:

遇到缓冲问题?

use IO::Handle qw( );
PIPE_TO->autoflush(1);

【讨论】:

    【解决方案2】:

    它不起作用的原因可能是你有语法错误。

    否则:除了引入行缓冲语义之外,您实际上什么都不做(您只是将读取的内容通过管道传输到另一个程序,在这种情况下相当于只是运行程序)

    对缓冲取模(您似乎并不明确需要)一个等效脚本将是:

    #!/usr/bin/perl
    
    exec ("./word_counter.pl");
    

    【讨论】:

    • 有没有办法使用 |这样执行的语法?
    • 在您当前的OP中,您需要从#!/usr/bin/perl/中删除尾随/,并且您需要关闭while (&lt;STDIN&gt;中的括号
    【解决方案3】:

    这是你想要做的吗?

    #!/usr/bin/perl
    use warnings;
    use strict;
    
    open (my $PIPE_TO, "|-", "./word_counter.pl") or die $!;
    while(<>) {
      print $PIPE_TO $_;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-02
      • 2014-09-08
      相关资源
      最近更新 更多