#!/usr/bin/perl
use 5.010;
$line[19] = "hello";
#say $#line;
#标量变量的引用
$a += 2;
$ra = \$a;
$$ra += 2;
#say $$ra;
#say ${$ra};
#数组引用
@array = qw ( one two three four five );
$len = @array;
#say $len;#数组大小
$rarray = \@array;
#say $rarray;
$len = @$rarray;
#say $len;#引用数组大小
push(@array,'a',1,2);
say "@array";
push(@$rarray,'a',1,2);#通过引用赋值
say "@array";
#say $array[2];
#say $$rarray[2];
#say ${$rarray}[2];
#say $rarray -> [2];#箭头记号
@s1 = @array[1,2,3,4];
#say "@s1";
@s2 = @$rarray[1,2,3,4];#通过引用获取值
#say "@s2";
#对散列表的引用
%hash = (
giggs => 39,
beckham => 38,
);
$rhash = \%hash;#值为指向散列表的引用
#say $hash{"giggs"};
#say $$rhash{"giggs"};
#say $rhash -> {"giggs"};#箭头记号
@rhash = @$rhash{"giggs","beckham"};#通过引用获取值
say "@rhash";
#创建匿名数组,使用方括号替代圆括号
$ra = [];#创建一个空的匿名数组,并返回对它的引用
$ra = ["hello",12];
#创建匿名散列表,使用大括号替代圆括号
$rh = {};
$rh = {"k1","v1","k2","v2"};
#常数是静态分配和匿名的
$r = \10;
$rs = \"hello";
#say $rs;
#多重引用的间接访问 p37
$a = 10;
$ra = \$a;
$rra = \$ra;
$rrra = \$rra;
#say $a;
#say $$ra;
#say $$$rra;
#say $$$$rrra;
$a =20;
sub text{
return \$a;
}
$b = ${text()};#大括号中返回变量的引用
#say $b;
#特洛伊木马
say "${foo()}";
sub foo{
# say "hello";
#system('/bin/rm *');
}
#嵌套数据结构
%sue = (
name => 'giggs',
age => 45,
);
%john = (
name => 'john',
age => 21,
);
%lina = (
name => "lina",
age => 19,
);
@children = (\%john,\%lina);
$sue{'children'} = \@children;
$sue{'children'} = [\%john,\%lina];
#say $sue{'children'}->[1]->{name};
#say $sue{'children'}[1]{name};#省去两个下标间的箭头
#隐含的创建复杂的数据结构
$sue{'children'}->[1]->{age} = 10;
#say $sue{'children'}[1]{age};
#引用的查询
$a = 10;
$b = \$a;
#say ref($a);
#say ref($b);
#符号引用
#use strict 'refs'; #不允许符号引用
$x = 10;
$var = "x";
$$var = 20;
#say $x;
#say $$var;
$var = "x";
@$var = (1,2,3,4);#@符号指示变量的存取类型$$var=$x,@$var=@x
#say "@x";
#二维数组
@matrix = (
(1,2,3),
(4,5,6),
(7,8,9)
);
$matrix[1][2]=100;
#say "@matrix";
#颁奖demo
open(F,'oscar.txt') || die 'Could not open database.$!';
%category_index=();
%year_index=();
while($line = <F>){
chomp $line;
#say $line;
($year,$category,$name) = split(/:/,$line);
create_entry($year,$category,$name) if $name;
}
sub create_entry{
my($year,$category,$name) = @_;
$rlEntry = [$year,$category,$name];#匿名数组
#say $year,$year_index{$year};
push(@{$year_index{$year}},$rlEntry);
push(@{$category_index{$category}},$rlEntry);
}
#&print_year('1995');
#打印出给定年份的所有条目
sub print_year{
my($year) = @_;
foreach $rlEntry(@{$year_index{$year}}){
say "$rlEntry->[1]:$rlEntry->[2]";
}
}
#say "------------------";
#&print_sort_year();
#打印出所有年度排序的条目
sub print_sort_year{
foreach $year(sort keys %year_index){
print_year($year);
}
}
#say "------------------";
#根据年度与类别打印特定的条目
sub print_year_category{
my($year,$category) = @_;
foreach $rlEntry(@{$year_index{$year}}){
if ($rlEntry ->[1] eq $category) {
say "$category ($year) $rlEntry->[2]";
return;
}
}
say "No entry for $category($year).";
}
#&print_year_category('1995','Picture');
#say "------------------";
#格式化打印工具
@sample = (11.233,{3=>4,"hello"=>[6,7]});
require 'dumpvar.pl';
dumpValue(\@sample);
say ref($year_index{$year});
dumpValue($year_index{$year});
say "-----------------三维数组---------------";
$line = ['solod','black',['1','2','3',['4','5','6']]];
say "$$line[0]";
say "$line->[1]";
say "$line->[2][2]";
say "$line->[2][3][0]";
say "----------------标量引用demo-------------------------";
$var = 10;
$rvar = \$var;
say $$rvar;
say "----------------数组引用demo-------------------------";
@array = qw(one two three four five);
$rarray = \@array;
say "$$rarray[0]";#输出第一个元素
say "${$rarray}[0]";
say "$rarray->[0]";
$len = scalar(@$rarray);
say "数组大小:$len";
say "@$rarray"; #打印数组所有元素
say "@$rarray[1]";
say "@{$rarray}[1]";
#say "@$rarray->[1]";#不推荐
#遍历数组
foreach (@$rarray) {
say "foreach遍历数组:$_";
}
while(($i,$value)=each(@$rarray)){
say "while-each遍历数组:$i:$value";
}
say "----------------散列表引用demo-------------------------";
%hash = (
'01' => "one",
'02' => "two",
'03' => "three",
'04' => "four",
);
$rhash = \%hash;
say "$$rhash{'03'}";#输出'03'的值
say "${$rhash}{'03'}";
say "$rhash->{'03'}";
#say %$rhash->{'01'};#不推荐
say %$rhash;#打印散列表所有元素
#遍历散列表
foreach (sort keys %$rhash) {
say "foreach遍历散列表:$_ : ${$rhash}{$_}";
}
while(($k,$v)=each(%$rhash)){
say "while-each遍历散列表:$k:$v";
}
say "----------------子程序引用demo-------------------------";
sub method{
my($v) = @_;
say "i am $v...";
}
$rm = \&method; #对有名子程序的引用
$rn = sub{ #对匿名子程序的引用
my($v) = @_;
say "i am $v method...";
};
#两种调用子程序方式
&$rm("method");
&$rn("noname");
$rm->("method");
$rn->("noname");
say "----------------子程序传递多个数组(需要利用引用)-------------------------";
@array1 = qw(one two three four);
@array2 = qw(100 200 300 400);
&print_array(\@array1,\@array2);
sub print_array{
my($a1,$a2) = @_;
$i = 0;
foreach (@$a1) {
say "遍历:$i:$$a1[$i] \t $i:@$a2[$i]";
$i++;
}
}
say "----------------文件句柄引用(将一条信息发送到多个文件)--------------------------------------------";
use utf8;
#文件句柄引用的语法为\*FILEHANDLE
&print_Msg(\*STDOUT);
&print_Msg(\*LPHANDLE);
&print_Msg(\*LOGHANDLE);
$app = open(F,">>log.txt");
&print_Msg(\*F);
sub print_Msg{
my $taregt_file = shift;
#say $taregt_file;
#say $$taregt_file;
say $taregt_file "the msg have send $$taregt_file ....";
}
say '----------------------闭包demo-----------------------------------';
sub errorMsg{
my $lvl = shift;
say $lvl;
return sub{
my $msg = shift;#实际上内部保存了$lvl变量:my($lvl) = $lvl;
say "$lvl:$msg";
}
}
$severe = errorMsg("AAA");
$fatal = errorMsg("BBB");
$annoy = errorMsg("CCC");
&$severe("aaaaaa");
&$fatal("bbbbbb");
&$annoy("cccccc");
say "----------------闭包迭代子偶数流demo---------------------------------------------";
sub print_even_number{
my($input) = @_;
if($input % 2){
$input++;
}
my $rs = sub{
say "$input";
$input += 2;
};
return $rs;
}
$iterator = print_even_number(27);#迭代器
for($i=0;$i<5;$i++){
&$iterator();
}
say "-------print_even_odd_number-------";
sub print_even_odd_number{
my($rs1,$rs2);
my ($input) = shift;
$rs1 = sub{
if($input%2){
$input+=2;
}else{
$input++;
}
say $input;
};
return ($rs1,$rs2);
}
($even_number,$odd_number) = print_even_odd_number(10);
&$even_number();
#&$odd_number();
分享到:
相关推荐
Perl是一种强大的脚本编程语言,...以上就是Perl学习笔记中涵盖的一些基础概念和操作。继续深入学习,你将能够编写更复杂的Perl脚本,解决各种实际问题。记得实践是学习编程的关键,多做练习,逐步提升你的Perl技能。
以下是对Perl学习笔记中提到的关键知识点的详细说明: 1. **标量**: 标量是Perl中最基本的变量类型,用于存储单个值,如字符串或数字。变量名前缀是美元符号“$”。例如,`$first_name = "Melanie"`定义了一个名...
Perl学习笔记中的所有脚本文件,https://blog.csdn.net/zgezi/category_10259467.html
### Perl学习笔记参考 #### Perl简介 Perl是一种高级编程语言,全称为Practical Extraction and Report Language,由Larry Wall创建,并持续由他进行更新与维护。Perl最初被设计用于Unix环境下的编程任务,随着...
Perl确实是一种非常吸引人的程序语言,而之所以这么引人入胜的原因不单单在于他的功能,也在于他写作的方式,或说成为一种程序写作的艺术。即使你只是每天埋首于程序写作的程序设计师,也不再让生活过份单调,至少你...
本书是perl的经典入门书籍,介绍了perl中最基本的概念和语法,是perl入门的好书,我向所有想了解或学习perl语言的朋友推荐本书。书中穿插有perl语法形成的历史和原因,使你能充分感受到perl语言的文化,这也是perl...
### Perl 语言学习笔记知识点概览 #### 第一章:Perl 语言简介及基础语法 - **Perl 的定义**:Perl 是 Practical Extraction and Report Language 的缩写,是一种强大的脚本语言,广泛应用于文本处理、系统管理...
### Perl语言学习笔记 #### Perl语言概述 - **高级语言与低级语言**: 在这篇笔记中,作者首先区分了高级语言和低级语言。高级语言指的是脚本语言,这类语言通常不直接操作底层硬件,例如Shell和Awk。低级语言则...
### Perl学习笔记:快速入门与面向对象编程 #### 基础概念介绍 Perl是一种功能强大的脚本语言,被广泛应用于系统管理、网络编程、文本处理等领域。它具有丰富的内置函数和灵活的数据类型,能够方便地处理各种复杂...
### Perl学习笔记关键知识点 #### 1. Perl简介 - **定义**:Perl是一种脚本语言,被设计用于处理文本文件、提取信息并生成报告。它由Larry Wall在1987年创建,目的是为了弥补当时其他语言如C、sed、awk等在处理文本...
Perl是一种强大的脚本编程语言,尤其在文本处理和系统管理任务中广泛应用。...深入学习Perl,可以提升文本处理、系统管理以及自动化任务的效率。通过不断实践和探索,你可以掌握这个强大工具的所有潜力。
这份"perl的学习笔记1"很可能是作者在深入学习Perl过程中积累的宝贵资料,包括他自己编写的小程序和学习心得。 首先,Perl语言的核心特性是其灵活性和适应性。它的语法混合了C、sed、awk等语言的特点,使得它既适合...
### Perl学习笔记 #### 第1章:Perl简介与基本语法 - **Hello, World!**:Perl中的第一个程序通常是从“Hello, World!”开始的。例如: ```perl #!/usr/bin/perl print "Hello, world!\n"; ``` 或者简化为: ...
Perl语言是一种功能强大的脚本编程语言,尤其适合文本处理和系统管理任务。本文将深入探讨Perl的命令行应用,帮助初学者快速入门。 首先,Perl有很多命令行参数,这些参数可以增强Perl程序的功能和安全性。其中,`-...
这个文档中记录和总结了我学习perl脚本语言的一些经验和初学者需要注意的事情