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

perl中的一流实体和二等实体之间有什么区别?

发布时间:2020-12-15 22:03:09 所属栏目:大数据 来源:网络整理
导读:“一流实体”的定义是什么,它与“二类实体”有什么不同? 当使用qr //操作符创建时,“使用现代Perl中的正则表达式是正则表达式”(取自Modern Perl:该书),这意味着什么? 解决方法 正如MeNo更正确地说,一类实体是可以自由分配给变量的语言的数据类型.在Perl
“一流实体”的定义是什么,它与“二类实体”有什么不同?

当使用qr //操作符创建时,“使用现代Perl中的正则表达式是正则表达式”(取自Modern Perl:该书),这意味着什么?

解决方法

正如MeNo更正确地说,一类实体是可以自由分配给变量的语言的数据类型.在Perl中,它们包括:

>标尺
>数组
>哈希
Coderefs(例如匿名子程序)
> IO
> Typeglobs(符号表是globs的哈希值)
>格式

那些可以驻留在符号表中.标量槽可以被各种其他类型所占据:

>有符号整数
>无符号整数
>浮点数
>弦
>参考文献
>正则表达式

这些实体中的一些具有内置的构造函数:标量的数字和字符串,数组和散列的列表符号,匿名数组和哈希表的[]和{}代码的子关键字,IO的开放函数对象,格式内置的格式,引用的引用运算符以及正则表达式的qr {}运算符.

Perl中有语言结构不是一级实体,不能分配给标量或其他一级实体.例如,包.此代码无效:

my $anonymous_package = package { ... };  # XXX

Shell命令有自己的内建,但是没有数据对象,所以这不行:

# don't execute `yes`,but store a handle to it in reference
my $shell_command = qx{yes};

相反,这个声明不应该终止(也可能打破你的记忆).

Perl中的列表是语言构造,但没有数据类型:

my $listref = ($x,$y,$z); # assigns reference to $z instead

Perl中的内置类型可以具有强制规则:

数字和字符串来回强制.
>列表上下文中的单个标量是arity的列表1.
>标量上下文中的一个数组计算出数组的长度
可以将一个(偶数值)数组分配给散列
>可以将Hash分配给数组,以便将此数组分配给另一个哈希将重新创建相同的哈希
>标量上下文中的哈希值评估为(a)假值(如果为空)或(b)指示填充和分配的存储桶的数量的字符串,例如1/8或(c)数字上下文中的键数.
>字符串上下文中的正则表达式求值到一个模式字符串,其行为类似于它们所指定的字符串:qr(ab?c)eq“(?-xism:ab?c)”,具体取决于perl的版本.

对象可能会超载,通过重载显示类似的强制规则.

在正则表达式引用的情况下,包含这样的引用的标量可以与正则表达式文字互换使用,例如.在模式

$string =~ /ab?c/

如果$regex如上所述,正则表达式可以替换为$regex:

my $regex = qr/ab?c/;
$string =~ $regex ### no dereferencing syntax!
# $string =~ /$regex/ will work too,but may invoke string overloading first (?)

例如,coderefs需要更多的biilerplate代码:

sub foo {...}
foo();

my $foo = sub {...};
$foo->();  # two possibilities
&$foo();

(编辑:李大同)

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

    推荐文章
      热点阅读