编程C,C ++,Java,PHP,Ruby,图灵,VB
计算机科学加拿大 
编程C,C ++,Java,PHP,Ruby,图灵,VB  

用户名:   Password: 
 登记登记   
 [perl5-tut] perl介绍:标量,阵列,哈希和refs
指数 -> 一般编程
查看上一个主题 可打印的版本下载主题订阅本主题私人信息刷新页面 查看下一个主题
作者 信息
WTD.




邮政发布: 2005年9月20日星期二1:13  帖子主题:[Perl5-Tut] Perl介绍:标量,数组,哈希和裁判

随着Rizzix对我们谦卑的网站进行了一些纯粹的Perl代码,我认为拥有一些基本的介绍教程将是好的。 微笑

变量

与最受欢迎的编程语言不同,Perl将数据存储在“变量”中。 眨眼

Perl中的变量采用四种基本表单:Scalars,数组,哈希和引用。

标量

标量是最基本的变量类型。数字和字符串都是标量。

就语法而言,标量变量的名称看起来很像那些涉及其他编程语言的名称。但是,与许多语言不同,名称从$“sigil”开始,它将它们表示为标量。

一些快速的例子:

perl:
$ an_integer. = 42;
$ a_string. = “你好”;
$ office_string. = '世界';
$ a_float. = 32.7;


阵列

阵列是一种用于存储多个值的方便变量。与许多其他语言不同,Perl的阵列没有设置大小。它们可以根据需要自动调整大小。

创建一个数组(以及其他技术):

perl:
@names. = (“鲍勃”, “约翰”, “史蒂夫”);


在这里,您可以看到使用@ sigil来表示一个数组。

阵列从零部索引,并访问数组的元素,如下所示:

perl:
$ bobs_name. = $名称[0];


那么,为什么Sigil在“名字”的变化面前?嗯,这是Perl社区中僵局的源泉,但这是它的方式。理由是,数组的每个元素是标量,并且标量使用$ sigil。

也许数组上最常见的操作是前面提到的访问和“推送”。 “按”子程序将新值附加到数组的末尾。

perl:
@names. = ();
@names., “内维尔”;


哈希

数组按数字索引,但哈希由字符串索引。

让我们说我们想通过学生名称储存学生成绩。

perl:
%等级 = (“鲍勃” => 86, “约翰” => 93);


要访问哈希中的元素,我们可以简单:

perl:
$ bobs_grade. = $等级{“鲍勃”};


与数组一样,当我们访问单个元素时,%sigil将变为$,以指示哈希的所有元素是标量。

将条目添加到哈希方面很容易。

perl:
$等级{“eunice”} = 65;


参考

我们可以使用反斜杠运算符轻松获得对任何变量的引用。

perl:
$ an_integer. = 42;
@大批 = (42, 37, 89)
%哈希 = (“foo” => “你好”, “酒吧” => “世界”);

$ int_ref. = \$ an_integer.;
$ array_ref. = \@大批;
$ hash_ref. = \%哈希;


这真的在哪里有用?

好吧,让我们再次看看那个成绩。如果我们希望每个学生有多个成绩怎么办?嗯,一个数组会很好地做得很好。

perl:
%等级 = (“鲍勃” => (42, 86, 78), “约翰” => (93, 54));


但是,这不起作用,因为就Perl而言,这看起来像:

perl:
%等级 = (“鲍勃” => 42, 86, 78, “约翰” => 93, 54);


看起来像:

perl:
%等级 = (“鲍勃” => 42, 86 => 78, “约翰” => 93, 54);


这没有意义。

但哈希和阵列可以存储标量,并且参考是基本上是一种标量,所以......

perl:
%等级 = (“鲍勃” => [42, 86, 78], “约翰” => [93, 54]);


方形括号语法只是创建数组参考的简写。类似地,Crly括号是用于创建哈希引用的简写。

那么,我们如何处理与原始数据类型一样的参考?

perl:
@johns_grades. = @{$等级{“约翰”}};


访问特定成绩可以看起来像:

perl:
$ One_of_Johns_grades. = @{$等级{“约翰”}}[1];


但这将是:

perl:
$ One_of_Johns_grades. = $等级{“约翰”}->[1];


类似的形式工作,用于标量参考和哈希引用。
赞助
赞助
赞助
赞助
Hikaru79.




邮政发布: 2005年9月20日星期二上午6:25  帖子主题:(没有主题)

有点哲学问题,但Perl的“阵列”之间有什么区别,例如,Python的“列表”?我认为区别是列表可以调整,而数组不是 - 如果Perl的数组是可调整的,那么它不是如何列表?
Rizzix.




邮政发布: 2005年9月20日星期二11:27  帖子主题:(没有主题)

Perl也有一个列表..但是你不能将列表存储为......嗯......嗯列表......你必须将其存储为数组或哈希表。

Python列表和Perl的阵列类似于Perl没有列表生成器语法。 Perl的列表更像是一个非常长的元组。例如:
perl:
@my_arr. = (1,2,3,4,5,6);
这里(1,2,3,4,5,6)实际上是列表,它存储为数组。

但这基本上是一个阵列初始化语法吗?怎么可能是列表?

好吧,你也可以做这样的东西
perl:
@sub_arr. = (1,2,3,4,5,6)[3,2..4];
啊哈!那么这是一个数组文字吗?没有因为你也可以这样做
perl:
($ A., $ B.) = ($ B., $ A.)
as well as this
perl:
%my_hash. = (ABC => 'abc',数字=> 123);


所以在Perl中,我们只需称之为列表。
Rizzix.




邮政发布: 2005年9月20日星期二11:37  帖子主题:Re:[Perl5-Tut] Perl介绍:标量,数组,哈希和裁判

WTD写道:
但这将是:

perl:
$ One_of_Johns_grades. = $等级{“约翰”}->[1];


类似的形式工作,用于标量参考和哈希引用。


你忘了提到..你可以简单地这样做:
perl:
$ One_of_Johns_grades. = $等级{“约翰”}[1];
自 - > is implied
WTD.




邮政发布: 2005年9月20日星期二11:40  帖子主题:(没有主题)

确实。 “背景”的概念是 非常 强大的perl。

考虑“列表”和“标量”上下文之间的区别以获取数组的长度。

perl:
@Grades. = (54, 67, 32, 98, 87, 67, 12);
$ number_of_grades. = @Grades.;


当然这是对标量背景的隐性追加。我们可以明确转变。

perl:
@Grades. = (54, 67, 32, 98, 87, 67, 12);
$ number_of_grades. = 标量子 @Grades.;
从上一个显示帖子:   
   指数 -> 一般编程
查看上一个主题 告诉一个朋友可打印的版本下载主题订阅本主题私人信息刷新页面 查看下一个主题

11  [ 5 Posts ]
跳到:   


Style:  
搜索: