do語句塊結構以下:code
do {...}
do語句塊像是匿名子程序同樣,沒有名稱,給定一個語句塊,直接執行。且和子程序同樣,do語句塊的返回值都是最後一個執行的語句的返回值。變量
例如,將使用if-elsif-else結構進行賦值的行爲改寫成do。如下是if-elsif-else結構:file
my $name; if($gender eq "male"){ $name="Malongshuai"; } elsif ($gender eq "female"){ $name="Gaoxiaofang"; } else { $name="RenYao"; }
改寫成do結構:perl
my $name=do{ if($gender eq "male"){"Malongshuai"} elsif($gender eq "female") {"Gaoxiaofang"} else {"RenYao"} }; # 注意結尾的分號
在perl中,使用表達式修飾符改寫流程控制結構的時候,控制符左邊只能寫一個語句。例以下面的if,左邊有了print後,就不能再有其它語句。程序
print "..." if(...);
使用do結構,能夠將多個語句包圍,而後執行:di
#!/usr/bin/perl use 5.010; $a=3; do { say "statement1"; say "statement2"; } if $a > 2;
由於do有本身的代碼塊,有時候能夠在這個代碼塊中使用本身的私有變量。文件
例如,讀取一個文件,將文件中的內容賦值給一個變量。(涉及到後面的內容,看不懂請跳過)co
my $file_content = do { local $/; local @ARGV = ("/root/a.txt"); <>; };
或者:
my $file_content = do { local $/; open my $fh,'<',"/root/a.txt" or die; <$fh>; };