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>; };