gpt4 book ai didi

linux - Bash 中带参数的 Perl 标准输入

转载 作者:太空狗 更新时间:2023-10-29 11:30:43 25 4
gpt4 key购买 nike

我想在 bash 中有这样的管道

#! /usr/bin/bash
cut -f1,2 file1.txt | myperl.pl foo | sort -u

现在在 myperl.pl它有这样的内容

my $argv = $ARG[0] || "foo";

while (<>) {
chomp;
if ($argv eq "foo") {
# do something with $_
}
else {
# do another
}
}

但是为什么Perl脚本无法识别通过bash传递的参数呢?即带有此消息的代码中断:

Can't open foo: No such file or directory at myperl.pl line 15.

正确的方法是什么让我的 Perl 脚本可以接收标准输入和参数同时?

最佳答案

<>是特殊的:它从标准输入或命令行中列出的每个文件返回行。因此,来自命令行的参数被解释为要打开并从中返回行的文件名。因此,它无法打开文件的错误消息 foo .

在您的情况下,您知道要从 <stdin> 读取数据, 所以只需使用它而不是 <> :

while(<stdin>)

如果您想保留在命令行上可选地指定输入文件的功能,您需要删除参数 foo来自 @ARGV使用前 <> :

my $firstarg = shift(@ARGV);
...
while (<>) {
...
if ($firstarg eq "foo") ...

关于linux - Bash 中带参数的 Perl 标准输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2620652/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com