Perl 中的这两个打印语句有什么区别? if 语句在做什么?

What is the difference between these two print statements in Perl? And what is the if statement doing?

代码 1

my @ ary = ( 1, 2, 3 );   
print "size = " . @ ary . "\n" ;  
print "size = @ ary \n";  

代码 2

if( $thing =~ /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/ )
{
print "      \n";
}

你能解释一下'Code 1'中两个打印命令的区别吗?

'Code 2' 中的 if 语句中的代码在做什么?

通常,您将 'sigil'(在本例中为 @ 符号)附加到变量名称。但是,在双引号字符串之外,您可以用 space 分隔它们。在双引号字符串中,印记和变量名之间不能有 space。当印记和双引号内的名字之间有一个 space 时,@ 是一个 @ 并且名字是一个字符串。

此外,在标量上下文中,例如字符串连接,@ary 生成数组的大小。

因此,打印产生:

size = 3
size = @ ary 

写得比较正统,你可能有:

#!/usr/bin/env perl
use strict;
use warnings;

my @ary = ( 1, 2, 3 ); 
print "size = " . @ary . "\n";
print "size = @ ary\n";
print "size = @ary\n";

这会产生:

size = 3
size = @ ary
size = 1 2 3

if语句及其后面的打印语句查看$thing中的字符串,看它是否是由点分隔的四串数字组成的序列,然后打印出四个组成部分的数字.例如,如果您有:

$thing = "192.29.36.256";

然后它会打印

192  29  36  256

如果您认为那是一个 I/P 地址,那么您几乎是对的,但当然它实际上并不是一个 I/P 地址。但是代码也可以处理 "12031.99023.23412212.23459790523"