Linux Perl-basicstdin问题

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>;

我现在学习Perl

我有以下代码,其目的是提取软件名 通过文本解析。 本例中的软件名为“ddd”:

我不明白“1”是从哪里来的


感谢您的帮助。

错误源于:

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我不确定您是否理解这一点。。。。如果没有,你应该说点什么。