do BLOCK
Not really a function. Returns the value of the last command in
the sequence of commands indicated by BLOCK. When modified by
the "while" or "until" loop modifier, executes the BLOCK once
before testing the loop condition. (On other statements the loop modifiers test the conditional first.)
do BLOCK 不是一个真正的函数,返回BLOCK里最后命令的返回值。当返回值被while 或者 until 循环修改,在测试循环条件开始前执行BLOCK
"do BLOCK" does *not* count as a loop, so the loop control
statements "next", "last", or "redo" cannot be used to leave or
restart the block. See perlsyn for alternative strategies.
do BLOCK 不统计称为一个循环,因此循环控制着语句如next last 或者redo不能用于脱离还是重启block
do SUBROUTINE(LIST)
This form of subroutine call is deprecated. SUBROUTINE can be a
bareword, a scalar variable or a subroutine beginning with "&".
do 子函数列表 这种形式的子程序调用时不推荐的,子函数可以是bareword 标量变量
或者子函数 以&开头。
do EXPR Uses the value of EXPR as a filename and executes the contents
of the file as a Perl script.
do 'stat.pl';
is just like
eval `cat stat.pl`;
except that it's more efficient and concise, keeps track of the
current filename for error messages, searches the @INC
directories, and updates %INC if the file is found. See "@INC"
in perlvar and "%INC" in perlvar for these variables. It also
differs in that code evaluated with "do FILENAME" cannot see
lexicals in the enclosing scope; "eval STRING" does. It's the
same, however, in that it does reparse the file every time you
call it, so you probably don't want to do this inside a loop.
除非是更有效和简明的,跟踪当前文件的错误信息,搜索@INC中定义的目录,
更新 %INC 如果文件被找到 建议不要使用do 在一个循环里,每次调用都会重新解析文件
If "do" can read the file but cannot compile it, it returns
"undef" and sets an error message in $@. If "do" cannot read the file, it returns undef and sets $! to the error. Always check $@
first, as compilation could fail in a way that also sets $!. If
the file is successfully compiled, "do" returns the value of the last expression evaluated.
do可以读文件但是不能编译它,它返回"undef" 存储错误信息到$@
如果do 不能读文件 返回undef 写入$! 首先核对$@
Inclusion of library modules is better done with the "use" and
"require" operators, which also do automatic error checking and
raise an exception if there's a problem.
You might like to use "do" to read in a program configuration
file. Manual error checking can be done this way:
# read in config files: system first, then user
for $file ("/share/prog/defaults.rc",
"$ENV{HOME}/.someprogrc")
{
unless ($return = do $file) {
warn "couldn't parse $file: $@" if $@;
warn "couldn't do $file: $!" unless defined $return;
warn "couldn't run $file" unless $return;
}
}