Perl while循环打印来自不同来源的行

Perl while循环打印来自不同来源的行,perl,Perl,我有一个while循环,可以从STDIN或文件中读取行 但是,我不确定是否可以在while循环中包含if语句,使其从STDIN或file中读取行 是否有一种方法可以在回路运行时操纵哪些线路(例如,线路来自何处) 例如,我设置了一些关键字,以便根据提供的行参数和打开的文件读取行来知道输入来自何处 我知道解决这个问题的方法之一可能是首先将STDIN放入数组中。解决方案不应使用用户阵列 if ($argCount == 1) { $keyword = "input"; }

我有一个while循环,可以从STDIN或文件中读取行

但是,我不确定是否可以在while循环中包含if语句,使其从STDIN或file中读取行

是否有一种方法可以在回路运行时操纵哪些线路(例如,线路来自何处)

例如,我设置了一些关键字,以便根据提供的行参数和打开的文件读取行来知道输入来自何处

我知道解决这个问题的方法之一可能是首先将STDIN放入数组中。解决方案不应使用用户阵列

if ($argCount == 1) {
    $keyword = "input";
}
else {
    $keyword = "file";
    open ($out, '<', "temp.txt") or die "Cannot open file";
}

while ( ($line = <STDIN> && &keyword eq "input") || ($line = <$out> && $keyword eq "file") ) {
    print "$line\n";
    # do something with lines
}
     
if($argCount==1){
$keyword=“输入”;
}
否则{
$keyword=“文件”;
打开($out),
my$fh;
如果(…){
$fh=\*STDIN;
}否则{
打开($fh),
my$fh;
如果(…){
$fh=\*STDIN;
}否则{

打开($fh),我想您只需要“:
while(){…}
读取命令行中提到的文件,如果没有提供文件,则打开stdin。@JimGarrison
while()
$ARGV[0]开始读取
,但是如果第一个参数不是文件怎么办?在调用diamond操作符之前,您可以在任何时候将@ARGV更改为您需要的任何值,因此:
shift@ARGV;
之前,而
。Re“如果第一个参数不是文件怎么办?”,使用类似Getopt::Long的东西。它将从
@ARGV
中删除它解析的选项,只留下一个文件。我想您只需要从命令行中提到的文件中读取“:
while(){…}
,如果没有提供文件,则读取stdin。@JimGarrison
while()
$ARGV[0]开始读取
,但是如果第一个参数不是文件怎么办?在调用diamond操作符之前,您可以在任何时候将@ARGV更改为您需要的任何值,因此:
shift@ARGV;
之前,而
。Re“如果第一个参数不是文件怎么办?”,使用类似Getopt::Long的内容。它将从
@ARGV
中删除它解析的选项,只留下一个或多个文件。