Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从bash到perl脚本的STDIN_Perl_Bash - Fatal编程技术网

从bash到perl脚本的STDIN

从bash到perl脚本的STDIN,perl,bash,Perl,Bash,我有一个perl脚本myscript.pl use strict; use IO::Handle; open OUTPUT, '>', "output.txt" or die $!; STDOUT->fdopen( \*OUTPUT, 'w' ) or die $!; while (<STDIN>){ print $_; } 我可以将$$中的内容粘贴到/tmp/msg中 我需要使用来自bash脚本的stdin运行perl脚本 有可能吗?怎么可能 我试过了,尽管我知

我有一个perl脚本myscript.pl

use strict;
use IO::Handle;

open OUTPUT, '>', "output.txt" or die $!;

STDOUT->fdopen( \*OUTPUT, 'w' ) or die $!;

while (<STDIN>){
print $_;
}
我可以将$$中的内容粘贴到/tmp/msg中

我需要使用来自bash脚本的stdin运行perl脚本

有可能吗?怎么可能

我试过了,尽管我知道这太傻了

cat in.$$> ./myscript.pl
in.$$> ./myscript.pl
in.$$> perl myscript.pl

要将文件内容指定为bash命令的标准输入,请在Perl脚本中使用,使用菱形运算符(也称为空文件句柄):

null filehandle很特别:它可以用来模拟sed和awk的行为,以及任何其他接受文件名列表的Unix过滤程序,对所有文件名的每一行输入都执行相同的操作。来自的输入来自标准输入或命令行上列出的每个文件。它的工作原理如下:第一次求值时,会检查@ARGV数组,如果它为空,$ARGV[0]设置为-,打开时会提供标准输入。然后将@ARGV数组作为文件名列表进行处理

下面是一个例子:

#! /usr/bin/perl
# cat command emulator

while ( my $line = <> ) {
    chomp $line;
    say $line;
}
将获取命令行上列出的每个文件,按顺序打开它们,然后读取每一行,或从STDIN中提取行

您也可以这样做:

while ( my $line = <STDIN> ) {
    chomp $line;
    say $line;
}

它将从STDIN中读取行,但不会从命令行读取文件。

我可能误解了它,但是,./myscript.pl in.$$如何?
cat in.$$ | ./myscript.pl
echo foo | ./myscript.pl
#! /usr/bin/perl
# cat command emulator

while ( my $line = <> ) {
    chomp $line;
    say $line;
}
while ( my $line = <STDIN> ) {
    chomp $line;
    say $line;
}