perl语言中例如local(*queryString)=@_ if @_;是什么意思?星号是什么?中间那个if又是怎么回事?

2025-03-10 16:04:37
推荐回答(4个)
回答1:

local ( 後来的 my ) , 是指後面的变数将只有效於这个 block ( sub ) , 离开之後便会消失於虚空之中
*var , 是全域的意思, 当你 print 一个 *变数 出来的时候, 你会发现这会变成这个变数, 连同现行的 package 的全称, 即 *main::var 这样的全称.

因为这样的特性, 我们很多时会用 *变数来传递 "引用" (reference) . 如: *hi = \&hello;
无论呼叫 hi, 或者 hello, 实际上都是用 hello() 来处理. 但你给的例子似乎完全没有意思. 因为後面的不是引用. 但如果写成 local(*queryString)=\@_ if @_ ; # 多了一个 \ 在 @ 前
那就会有意思, 这样 *queryString 就可以引用到 @_ 的参数.

@_ 就是传入 sub 的参数, 如
sub hi {
print "Hi! @_"

}
hi ( "Peter ", "Mary ", "Joseph " ) ;
# Hi! Peter Mary Joseph

在 Javascript, Java 或者很多语言入面, 我们会写成这样
if ( condition ) one_statement;
如果 if 後面只有 1 句指令, 就可以不用 { }
perl 也是这个意思, 不过将 if 放在後面, 这使得看上去更像英文.

整句的意思就是:
如果有 @_ , 那就将 *queryString 变成 @_ 的引用

回答2:

*表示别名意思是如果函数有传入参数的话给传入参数起个别名

回答3:

换成另一种形式就是:
if(@_)
{
local(*queryString)=@_;
}

回答4:

指定局部变量queryString以保存函数参数