Linux Perl-basicstdin问题
我现在学习Perl 我有以下代码,其目的是提取软件名 通过文本解析。 本例中的软件名为“ddd”: 我不明白“1”是从哪里来的Linux Perl-basicstdin问题,linux,perl,stdin,Linux,Perl,Stdin,我现在学习Perl 我有以下代码,其目的是提取软件名 通过文本解析。 本例中的软件名为“ddd”: 我不明白“1”是从哪里来的 感谢您的帮助。错误源于: my $softName = print "@soft[4]\n"; # ^^^^^ 函数在成功时返回1(true),它在此处执行此操作。1被分配给变量,然后打印变量 print "$softName\n"; 简要回顾: my $installPath = <STDIN>;
感谢您的帮助。错误源于:
my $softName = print "@soft[4]\n";
# ^^^^^
函数在成功时返回1
(true),它在此处执行此操作。1
被分配给变量,然后打印变量
print "$softName\n";
简要回顾:
my $installPath = <STDIN>; # "/a/b/c/ddd"
my @soft = split '/', $installPath; # 5th element is "ddd"
my $softName = print "@soft[4]\n"; # this prints "ddd", but "1" is returned
# ^^^^^ print returns 1, which is assigned to $softName
print "$softName\n"; # "1" is printed
它只取数组的第五个元素。引用单个元素时,应使用$
而不是@
。当引用一个切片、多个元素时,可以使用@
更好的方法是使用
File::Basename
:
use File::Basename;
my $softName = basename($installPath);
是Perl 5中的核心模块。错误来自以下方面:
my $softName = print "@soft[4]\n";
# ^^^^^
函数在成功时返回1
(true),它在此处执行此操作。1
被分配给变量,然后打印变量
print "$softName\n";
简要回顾:
my $installPath = <STDIN>; # "/a/b/c/ddd"
my @soft = split '/', $installPath; # 5th element is "ddd"
my $softName = print "@soft[4]\n"; # this prints "ddd", but "1" is returned
# ^^^^^ print returns 1, which is assigned to $softName
print "$softName\n"; # "1" is printed
它只取数组的第五个元素。引用单个元素时,应使用$
而不是@
。当引用一个切片、多个元素时,可以使用@
更好的方法是使用
File::Basename
:
use File::Basename;
my $softName = basename($installPath);
是Perl 5中的核心模块。
my$softName=print“@soft[4]\n”
是处理数组的一种不好的方法,这就是导致问题的原因
作为一个整体引用数组时,应使用@
。这里通过引用@soft[4]
所做的工作是指向数组中的一个特定值,但您仍然在数组上下文中引用它,并且由于$softName
是一个只需要一个值的标量,perl会尽力找出您想要的值,因为您根本不需要这样的值。为了让perl清楚地知道您引用的是数组中的特定项,而不是整个数组,请改用$
。Perl会理解,因为您还指定了[4]
此外,分配给$softName
的不是该数组值,而是作为状态代码的打印的结果(这就是“1”的来源)
要更正代码,请将该行更改为:
my $softName = $soft[4];
my$softName=print“@soft[4]\n”
是处理数组的一种不好的方法,这就是导致问题的原因
作为一个整体引用数组时,应使用@
。这里通过引用@soft[4]
所做的工作是指向数组中的一个特定值,但您仍然在数组上下文中引用它,并且由于$softName
是一个只需要一个值的标量,perl会尽力找出您想要的值,因为您根本不需要这样的值。为了让perl清楚地知道您引用的是数组中的特定项,而不是整个数组,请改用$
。Perl会理解,因为您还指定了[4]
此外,分配给$softName
的不是该数组值,而是作为状态代码的打印的结果(这就是“1”的来源)
要更正代码,请将该行更改为:
my $softName = $soft[4];
非常感谢。但是有没有一种方法可以使用“print”而不使用“1”?正如我刚才在回答中所说的,您得到1
的原因是print
在成功时返回1
(true)。当您打印变量时,1
将被打印。@Assafbaruch我不确定您是否理解这一点。。。。如果没有,你应该说点什么。谢谢。但是有没有一种方法可以使用“print”而不使用“1”?正如我刚才在回答中所说的,您得到1
的原因是print
在成功时返回1
(true)。当您打印变量时,1
将被打印。@Assafbaruch我不确定您是否理解这一点。。。。如果没有,你应该说点什么。