if(@array)在perl中的含义是什么?

CBR*_*CBR 3 scripting perl

这在Perl中意味着什么?

  1. if (@array)
  2. if (!@array)

这是否意味着我们要求Perl检查数组是否存在?

谢谢

psx*_*xls 11

标量上下文中的数组返回元素的数量.所以if(@array)检查数组是否有任何元素.它类似于if(scalar(@array)!=0).


Bor*_*din 9

在Perl中,标量上下文中的数组计算数组中元素的数量.所以

my @array = ('a', 'b');
my $n = @array;
Run Code Online (Sandbox Code Playgroud)

设置$n为2.

此外,if将标量上下文应用于其参数.所以

my @array = ('a', 'b');
if (@array) { ...
Run Code Online (Sandbox Code Playgroud)

是相同的

if (2) { ...
Run Code Online (Sandbox Code Playgroud)

并且,因为2被认为是真的,所以遗体if 被执行.

最后,Perl认为是false的唯一数字是零,所以如果你传递一个空数组

my @array = ();
if (@array) { ...
Run Code Online (Sandbox Code Playgroud)

它是一样的

if (0) { ...
Run Code Online (Sandbox Code Playgroud)

并且if 不会被执行的身体.

无法发现Perl中是否存在变量.只要你use strict,你永远应该,Perl不会让你运行一个引用不存在的变量的程序.

  • +1 表示“`if` 将标量上下文应用于其参数”,从 https://perldoc.perl.org/perlsyn.html#Compound-Statements 或 https://perldoc.perl.org/ 都不清楚perldata.html#Context。 (2认同)

Сух*_*й27 5

if(@array)如果@array至少有一个元素,则为真。

my @array;
if (!@array) { print "empty array\n"; }
push @array, 11;
if (@array) { print "array has at least one element\n"; }
Run Code Online (Sandbox Code Playgroud)