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