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

Perl学习笔记(6)值为数组的数组,值为hash的hash,自定义的行分

发布时间:2020-12-16 00:32:22 所属栏目:大数据 来源:网络整理
导读:####################值为数组的数组 open(In,"sina.txt"); while(In) { chomp(); @URLS=/href="([^"]+)"/g; push(@ALLURLs,@URLS); } close(In); foreach(@ALLURLs) { print "$_n"; } ####################值为hash的hash #词=词与标注=词与标注与属性值
####################值为数组的数组 open(In,"sina.txt"); while(<In>) { chomp(); @URLS=/href="([^"]+)"/g; push(@ALLURLs,@URLS); } close(In); foreach(@ALLURLs) { print "$_n"; } ####################值为hash的hash #词=>词与标注=>词与标注与属性值"1"; open(In,"tag.txt"); while(<In>){ chomp; @Words=/(S+)/S+/g; @Pos=/S+/(S+)/g; for($i=0;$i<@Words;$i++){ ${$HashDict{$Words[$i]}}{$Pos[$i]}=1; }? } close(In); foreach(sort keys %HashDict){ print "#$_n"; $Pointer=$HashDict{$_}; foreach(sort keys %{$Pointer}){ print "Pos: $_n"; } } ####################Perl中的引用使用反斜杠表示 Perl引用就是指针,可以指向变量、数组、哈希表(也叫关联数组)甚至子程序。在Perl中,二者是通用的,无差别的。Perl引用在创建复杂数据方面十分有用。 例1 $variavle=22; ? $pointer=$variable; ? $ice="jello"; ? $iceprt=$ice; ? 例2 #!/usr/bin/Perl ? #UsingArrayreferences ? $pointer=@ARGV; ? printf"nPointerAddressofARGV=$pointern"; ? $i=scalar(@$pointer); ? printf"nNumberofarguments:$in"; ? $i=0; ? foreach(@$pointer){ ? printf"$i:$$pointer[$i++];n"; ? }? ####################读取文件时的行分隔符号$/ Perl中有很多种特殊变量,就像awk一样,它们用于文本处理。像什么记录输入/输出分隔符之类的。在Perl中,$/意即输入记录分隔符,代表着一个记录的结束和开始。 通常我们使用钻石操作符<>来从文件句柄中读取所需要的数据,默认它每次只读取一行?那么它是如何区分新记录的呢?这就是的$/的作 用。当<>遇到$/所定义的分隔符时,就认为这是一个行的结束。而默认的$/值就是换行符(n),当然不同系统之间默认的换行符不一样,这 点要注意下。 如果你要读取的数据像下面这样: 1 2 %% 3 %% 4 5 %% 6 你将如何按%%所示的分隔符来读取数据呢?我的意思是说,如何把1,2看成是一行,3是另一行,4 和5看成是一行。在我们了解到$/作用之后,你可能已经知道只要改变$/默认值为"%%n"就行了。恩,就是这样。 但是,这样鲁莽的改变程序的默认的行为是非常的危险的。为了把这种危险缩小到最小范围,我们通常在一个代码中来重定义$/的值。这样它所给我们的影响只会在那个代码块中,像下面这样: { ? ? $/="%%n"; ? ? .... ? ?$/="n"; } 像你看到的那样,就算是在{}中,我们也保险的恢复了$/默认值,这是一个好习惯。难道不是吗? 如果你认为$/就是这样了,那么非常让你失望了。它还有比较有意思一个用法。让我们看一个需求:如何每次从文件中读取1024字节的数据呢?有过其它背景的程序员们,可能会使用一些文件函数来完成它。但是,我们在使用Perl。它有自己的套路。下面来看看: { ? ? $/=1024; ? ? while(<>) {...} } 我从来不说什么废话,除了在这里之外。{}中的1024看上去是一个对常量的引用。但把它赋值给$/之后,你就不能这么理解它了,我们得按照Perl套路来思考:它的意思就是每次只读取1024字节的数据。 ####################localtime的使用 指令:localtime 语法:localtime(time) 说明:可返回九个有关时间的元素,在写CGI应用程序的时候常会用到系统的时间,所以在此会详细介绍这个函 数的用法。 示例:? ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time);? 其中:? $sec代表秒数[0,59] $min代表分数[0,59] $hour代表小时数[0,23]? $mday代表是在这个月的第几天[1,31]? $mon代表月数[0,11],要将$mon加1之后,才能符合实际情况。 $year从1990年算起的年数 $wday从星期六算起, 代表是在这周中的第几天[0-6] $yday从一月一日算起,代表是在这年中的第几天[0,365]? $isdst只是一个flag 知道这些变量之后,就可以在CGI应用程序中拿来应用了。 此外,也可以用下面这一行指令在UNIX系统下取得系统的时间。 为了避免错误发生,最好用绝对路径的方法来取得系统时间, 如果绝对路径不清楚的话可以用"which data"这个指令来得知。 最后要提字符的话,就不能正确执行系统的程序了。? $data='/usr/bin/data'; 而在perl5版本中, 也可以用下面这一行指令来取得系统时间。 $data=localtime(time);

(编辑:李大同)

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

    推荐文章
      热点阅读