`

perl学习笔记(一)

    博客分类:
  • Perl
阅读更多
#!/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技能。

    perl学习笔记

    以下是对Perl学习笔记中提到的关键知识点的详细说明: 1. **标量**: 标量是Perl中最基本的变量类型,用于存储单个值,如字符串或数字。变量名前缀是美元符号“$”。例如,`$first_name = "Melanie"`定义了一个名...

    Perl学习笔记中的所有脚本文件

    Perl学习笔记中的所有脚本文件,https://blog.csdn.net/zgezi/category_10259467.html

    perl学习笔记参考

    ### Perl学习笔记参考 #### Perl简介 Perl是一种高级编程语言,全称为Practical Extraction and Report Language,由Larry Wall创建,并持续由他进行更新与维护。Perl最初被设计用于Unix环境下的编程任务,随着...

    perl 学习笔记和心得

    Perl确实是一种非常吸引人的程序语言,而之所以这么引人入胜的原因不单单在于他的功能,也在于他写作的方式,或说成为一种程序写作的艺术。即使你只是每天埋首于程序写作的程序设计师,也不再让生活过份单调,至少你...

    perl学习笔记。。。

    本书是perl的经典入门书籍,介绍了perl中最基本的概念和语法,是perl入门的好书,我向所有想了解或学习perl语言的朋友推荐本书。书中穿插有perl语法形成的历史和原因,使你能充分感受到perl语言的文化,这也是perl...

    perl 语言学习笔记

    ### Perl 语言学习笔记知识点概览 #### 第一章:Perl 语言简介及基础语法 - **Perl 的定义**:Perl 是 Practical Extraction and Report Language 的缩写,是一种强大的脚本语言,广泛应用于文本处理、系统管理...

    perl学习资料!个人学习perl的笔记

    ### Perl语言学习笔记 #### Perl语言概述 - **高级语言与低级语言**: 在这篇笔记中,作者首先区分了高级语言和低级语言。高级语言指的是脚本语言,这类语言通常不直接操作底层硬件,例如Shell和Awk。低级语言则...

    perl学习笔记,让你更容易入门

    ### Perl学习笔记:快速入门与面向对象编程 #### 基础概念介绍 Perl是一种功能强大的脚本语言,被广泛应用于系统管理、网络编程、文本处理等领域。它具有丰富的内置函数和灵活的数据类型,能够方便地处理各种复杂...

    Perl学习笔记

    ### Perl学习笔记关键知识点 #### 1. Perl简介 - **定义**:Perl是一种脚本语言,被设计用于处理文本文件、提取信息并生成报告。它由Larry Wall在1987年创建,目的是为了弥补当时其他语言如C、sed、awk等在处理文本...

    Perl学习笔记.docx

    Perl是一种强大的脚本编程语言,尤其在文本处理和系统管理任务中广泛应用。...深入学习Perl,可以提升文本处理、系统管理以及自动化任务的效率。通过不断实践和探索,你可以掌握这个强大工具的所有潜力。

    perl的学习笔记1

    这份"perl的学习笔记1"很可能是作者在深入学习Perl过程中积累的宝贵资料,包括他自己编写的小程序和学习心得。 首先,Perl语言的核心特性是其灵活性和适应性。它的语法混合了C、sed、awk等语言的特点,使得它既适合...

    Perl 学习笔记

    ### Perl学习笔记 #### 第1章:Perl简介与基本语法 - **Hello, World!**:Perl中的第一个程序通常是从“Hello, World!”开始的。例如: ```perl #!/usr/bin/perl print "Hello, world!\n"; ``` 或者简化为: ...

    Perl语言入门学习笔记

    Perl语言是一种功能强大的脚本编程语言,尤其适合文本处理和系统管理任务。本文将深入探讨Perl的命令行应用,帮助初学者快速入门。 首先,Perl有很多命令行参数,这些参数可以增强Perl程序的功能和安全性。其中,`-...

    perl脚本语言学习笔记心得

    这个文档中记录和总结了我学习perl脚本语言的一些经验和初学者需要注意的事情

Global site tag (gtag.js) - Google Analytics