Perl程序通过STDIN获取两个不同的输入

时间:2016-05-31 07:24:41

标签: perl

我正在尝试编写一个perl程序:

    print "Enter the filename:";
    $filename = readline STDIN;

    print "Enter the string to be compared";
    $string1 = readline STDIN;

为了将这两个输入合二为一,我做了以下几点:

    print "Enter the filename and string to be compared:";
    my $input1 = readline STDIN; 
    my @name = split(' ',$input1); //split the input parameters by space
    $filename = $name[0];
    $string1 = $name[1];
    chomp $string1;

这是功能代码,我想知道是否有其他方法可以为此逻辑实现更优化的版本?

谢谢, DD

3 个答案:

答案 0 :(得分:5)

这就像你得到的那样优化了。在您确定需要之前,不要试图手动优化代码。鉴于这是等待IO,它无关紧要,因为IO比你在代码中所做的任何事情都慢。

但如果你的意思更多简洁

print "Enter the filename and string to be compared:";
chomp ( my ( $filename, $string )  = split ' ', <> ); 

这需要<> - 这是神奇的文件句柄,并且读取 STDIN或在命令行上指定的文件名。 (类似于grep / sed / awk)。

我们将它在空格上,在标量上下文中拆分 - 然后将拆分中的值传递给$filename$string的列表。然后选择剥离换行。

答案 1 :(得分:2)

如果kite来自perl secret

use warnings;
use strict;
print "Enter the filename and string to be compared:";
chomp( my @ar = (~~<>, ~~<> ) );
print @ar;        

答案 2 :(得分:0)

尝试使用下面的代码 `comand:perl your_script.pl -file_name'some_file' -string'some_string'

use Getopt::Long;

my ( $file_name, $string );
GetOptions(
'file_name=s' => \$file_name,
'string=s' => \$string,
) or die "Could not parse options";

if($file_name eq $string )
{
print "The file name is the same as the string\n";
}else{
print "Not a match\n";
}