声明:本神奇的Perl系列为刘兴(http://deepfuture.iteye.com/)原创,未经笔者授权,任何人和机构不能转载
1.1 push、pop、shift、unshift
1、push在数组末尾处增加元素,pop就是从数组的末尾取出元素。具体语法如下:
push ARRAY, (以逗号分隔的要增加的值列表)
push ARRAY,要增加的值
pop ARRAY
比如:
my @myarr;
push @myarr,-1;
push @myarr,0;
push @myarr,1;
print pop @myarr;
print "\n";
print pop @myarr;
print "\n";
print pop @myarr;
print "\n";
输出如下 :
1
0
-1
2、unshift在数据的起始增加元素,shift在数组的起始取出一个元素。shift弹出数组的值,并返回它,unshift的队列中增加值。具体语法如下:
unshift (ARRAY,(以逗号分隔的要增加的值列表))
unshift ARRAY,要增加的值
shift ARRAY
比如:
输出如下:
1
0
-1
3、通过对push、pop、shift、unshift使用组合,可以实现堆栈和队列的操作。
1)堆栈,后进先出,通过push和shift组合实现
my @myarr;
push @myarr,-1;
push @myarr,0;
push @myarr,1;
print pop @myarr;
print "\n";
print pop @myarr;
print "\n";
print pop @myarr;
print "\n";
输出如下:
1
0
-1
2)队列,先进先出,通过push和shift组合实现
my @myarr;
push @myarr,-1;
push @myarr,0;
push @myarr,1;
print shift @myarr;
print "\n";
print shift @myarr;
print "\n";
print shift @myarr;
print "\n";
输出如下:
-1
0
1
BOSS要求编写一个脚本,搜索某目录下所有以PHP扩展名结尾的源代码文件,并生成一个HTML文件,其内容是按目录归类的文件列表。
我们先简单介绍一下如何操作目录及文件:
通常使用opendir、closedir 、readdir函数操作目录,格式如下:
opendir(DH, $some_dir) || die "can't opendir $some_dir: $!";
#opendir打开目录,将目录句柄赋值给DH。$some_dir为要打开的目录名。
#开始循环读取目录下的文件
foreach $file(readdir DH){#读取目录下的文件,readdir返回文件列表
if ( -d $file){
# -d 文件名称 检测$file储存的文件名称是否为目录。
#$file是子目录,对子目录进行处理
}
else {
#$file是文件,对文件进行处理。
}
}
closedir DH;#关闭目录句柄
我们的思路是:
1) 打开要读取的目录。
2) 循环读取目录中所有文件,将新发现的子目录存储在数组中。
3) 继续取出数组中的目录,如果数组中没有元素,转到第4步,否则转到第1步。
4) 退出。
存放目录的数组采用堆栈的方式操作,可模拟深度优先搜索,较好地展示目录树结构。代码如下:
#perl3-8.pl
use 5.010;
use warnings;
use strict;
my $dirs='E:\TDDOWNLOAD\latest';# 初始路径
my $lsfile;
my @filedir;
my %filediryj;#已经访问过的目录 ,哈希键值对为:目录名=>文件数目
my $flcount;
my $ppfile;#文件匹配符 以正则方式表达的
open MYTXT,">phpfiles.htm";
#输出HTML文件头
say MYTXT '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">';
say MYTXT '<html xmlns="http://www.w3.org/1999/xhtml"> ';
say MYTXT '<head> ';
say MYTXT '<meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> ';
say MYTXT '<title>查找某目录下的某类文件</title> ';
say MYTXT '</head> ';
say MYTXT '<body> ';
$ppfile='php$'; #要寻找文件扩展名为php,php后紧跟符号$表示文件名以php结尾。
push @filedir,$dirs;
$|=1;
my $filedir;
while ($filedir=shift(@filedir)){
opendir DH,$filedir or die "不能打开$filedir"; #打开目录
say MYTXT "<br>$filedir<br>";
$flcount=0;
foreach $lsfile(readdir DH){#读取目录
#变量名=~m/正则表达式/ 表示对变量进行正则表达式匹配,
#如果匹配成功,则返回真,否则返回假
next if $lsfile=~m/^\./;#~m/^\./对$lsfile进行正则表达式匹配,^\.表示以点号开头
# .和..均以点号开头,分别表示当前路径和上一路径,它们不属于子目录和文件。
$lsfile="$filedir\\$lsfile";#”\”有特殊意义,因此必须以\\表示符号\
if ( -d $lsfile){
push @filedir,$lsfile;
}
elsif ($lsfile=~m/$ppfile/i) {
$flcount++;
print '.'; #在屏幕上输出进度
say MYTXT "<br> |$lsfile<br>";#匹配文件名写入HTML文件的body部分
}
}
close DH;
$filediryj{$filedir}=$flcount;#目录下匹配文件数目
say MYTXT "<br> |共$flcount个匹配文件<br>";
}
#输出HTML文件尾
say MYTXT '</body> ';
say MYTXT '</html> ';
分享到:
相关推荐
- 根据实际需求,使用哈希和数组完成相应的任务。 ### 知识点五:正则表达式 #### Perl正则基础 - 正则表达式是Perl的核心特性之一,用于匹配文本中的模式。 - 基础语法:使用`/pattern/`形式定义正则表达式。 #...
2. **字符串与数组操作**:Perl擅长处理文本,字符串操作和数组处理是其强项。学会如何操作字符串,以及如何使用数组和关联数组(哈希)进行数据存储和检索,对于编写脚本至关重要。 3. **文件和目录操作**:Perl...
在Perl编程语言中,列表(Lists)和数组(Arrays)是两种非常重要的数据结构,它们在处理有序数据时起着核心作用。这篇笔记将深入探讨这两个概念,以及它们在实际编程中的应用。 列表(Lists)在Perl中是一组逗号...
第四章 列表和数组变量 一、列表 二、数组--列表的存贮 1、数组的存取 2、字符串中的方括号和变量替换 3、列表范围 4、数组的输出 5、列表/数组的长度 6、子数组 7、有关数组的库函数 第五章 文件读写 ...
- 默认变量:介绍了Perl中的默认标量变量和数组变量。 2. Perl及其社区 - 社区网站、开发站点、事件和IRC,反映了Perl强大的社区支持。 3. Perl语言特性 - 命名空间:Perl中用于封装和模块化代码的结构。 - ...
- **列表与数组的概念**:介绍Perl中如何使用列表和数组存储数据,以及如何通过索引访问数组中的元素。 **1.5 进行文件操作** - **文件处理**:教授如何使用Perl进行文件读写操作,包括打开文件、读取文件内容、向...
3. **列表和数组.pptx** - 在Perl中,列表和数组是两种重要的数据结构。列表是一组无序的元素,而数组是有序的列表。你可以使用数组来存储和操作多组数据,Perl提供了丰富的数组操作函数,如push、pop、shift、...
9. **字符串和数组操作**:Perl提供了一系列内置函数,如chomp(), chop(), join(), split()等,用于处理字符串和数组。 10. **文件句柄和IO重定向**:Perl可以打开和操作各种类型的文件句柄,包括标准输入、输出和...
列表和数组是Perl中最常见的数据结构之一。了解如何创建、操作和遍历这些数据结构对于处理大量数据至关重要。 ##### 3.4 文件操作 Perl提供了强大的文件处理能力,包括读写文件、目录操作等功能。熟练掌握文件操作...
- **章节概述**: 介绍Perl中的列表和数组数据结构及其操作方法。 - **学习目标**: 理解列表与数组的区别;掌握数组的操作技巧,包括排序、检索等。 - **关键知识点**: - 数组声明与初始化:@前缀的使用。 - ...