加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何在Perl中使用符号引用?

发布时间:2020-12-15 23:31:50 所属栏目:大数据 来源:网络整理
导读:在Perl中,如果变量保存另一个变量的名称,如何使用第一个变量访问另一个变量? 例如,让我们 $name = "bob";@bob = ("jerk","perlfan"); 我该怎么用$name来了解bob是什么样的人? 虽然我不太确定,但我模糊的记忆告诉我它可能与typeglob有关. 解决方法 几点:
在Perl中,如果变量保存另一个变量的名称,如何使用第一个变量访问另一个变量?

例如,让我们

$name = "bob";
@bob = ("jerk","perlfan");

我该怎么用$name来了解bob是什么样的人?
虽然我不太确定,但我模糊的记忆告诉我它可能与typeglob有关.

解决方法

几点:

>你不是在谈论typeglobs,而是在谈论符号引用.
>不要使用符号引用 – 它们导致难以追踪错误.
>在几乎任何情况下,符号引用似乎都是个好主意,使用基于哈希的数据结构是最好的方法.
>当您不想更改哈希值时,请考虑使用Hash :: Util来锁定哈希值.
>符号引用不适用于词法变量.
> Typeglobs不适用于词法变量.
>使用词汇变量.
>不要使用符号引用.

有关参考文献的更多信息,请参阅perlreftut(符号和其他).
有关使用数据结构的帮助,请参见perldsc.
有关typeglobs的更多信息,请参阅perlmod.
有关词汇变量的更多信息,请参阅perlsub.

以下是使用锁定哈希来控制基于变量内容的数据访问的示例:

use strict;
use warnings;
use Hash::Util qw( lock_hash unlock_hash );

my %data;
lock_hash( %data );
#Altering %data is a fatal exception.

unlock_hash( %data );

%data = (
    'bob' => [ 'jerk','genius' ],);
lock_hash( %data );


for my $name (qw/ bob  margaret /) {
    my $info = $data{$name}; # Fatal error when accessing data for margaret.
    print "$name is an";
    print map "t$_n",@$info;
}

抛开所有警告,你需要使用符号引用的语法(但你不会):

use strict;
use warnings;

my $name = 'bob';

our @bob = qw/jerk genius/;

my $qualities;

{   no strict 'refs';
    print "$name: ",@$name,"n";
    $qualities = @$name;
}

print "$name is a @$qualitiesn";

请注意,数组@bob是用我们声明的.符号引用仅适用于符号表中的值.换句话说,词法变量不适用于符号引用.

如果我没有强调这一点,请不要使用符号引用.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读