2015-02-10 89 views
-2

代碼1Perl中這兩個打印語句有什麼區別? if語句在做什麼?

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

代碼2

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

能否請您解釋一下我在 '代碼1' 兩個打印命令的區別?

「代碼2」中的if聲明中的代碼是幹什麼的?

+1

在問你問題之前,請花時間仔細考慮你想問的整個問題。此外,請花時間正確縮進代碼。選擇它,然後按編輯框上方的** {}'**按鈕。 – 2015-02-10 05:57:32

+0

已記錄@JonathanLeffler – iamnewbie 2015-02-10 06:07:59

回答

2

通常,您將'sigil'(在這種情況下爲@符號)附加到變量名稱。但是,除了雙引號字符串之外,您可以用空格分隔它們。在雙引號字符串中,sigil和變量名之間不能有空格。當雙引號內的sigil和名稱之間有空格時,@@,名稱是一個字符串。

此外,在標量上下文中,如字符串連接,@ary會生成數組的大小。

因此,印刷生產:

size = 3 
size = @ ary 

寫了orthodoxly,你可能有:

#!/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"

+0

嗨@jonathan leffler, 能否請你解釋一下,如果有一個實時的例子,因爲我不能清楚地知道它 – iamnewbie 2015-02-10 06:15:38

+0

不; SO只做批處理 - 不是實時的。你不明白什麼? '$ thing'需要是一個包含字符串的變量。如果字符串包含4組小數點,由點分隔,並且字符串中沒有其他字符,則會打印這四個數字。有關詳細的說明,請參閱['perlretut'](http://perldoc.perl.org/perlretut.html)和稍後的['perlre'](http://perldoc.perl.org/perlre.html)和['perlreref'](http://perldoc.perl.org/perlreref.html)。或者閱讀一本關於Perl的書(駱駝書或駱駝書 - 或者也許羊駝書後的羊駝書)。 – 2015-02-10 06:20:50

+0

這裏有一個問題,當你把$ thing當作字符串來表示時,你的意思是我們在「」中定義它,就像我們在java中一樣?或者通過perl中的字符串表示與java中的「」中的引號相同,我們可以使用數字和字母數字數據? – iamnewbie 2015-02-10 06:32:08