`
deepfuture
  • 浏览: 4414126 次
  • 性别: Icon_minigender_1
  • 来自: 湛江
博客专栏
073ec2a9-85b7-3ebf-a3bb-c6361e6c6f64
SQLite源码剖析
浏览量:80146
1591c4b8-62f1-3d3e-9551-25c77465da96
WIN32汇编语言学习应用...
浏览量:70413
F5390db6-59dd-338f-ba18-4e93943ff06a
神奇的perl
浏览量:103622
Dac44363-8a80-3836-99aa-f7b7780fa6e2
lucene等搜索引擎解析...
浏览量:286643
Ec49a563-4109-3c69-9c83-8f6d068ba113
深入lucene3.5源码...
浏览量:15056
9b99bfc2-19c2-3346-9100-7f8879c731ce
VB.NET并行与分布式编...
浏览量:67850
B1db2af3-06b3-35bb-ac08-59ff2d1324b4
silverlight 5...
浏览量:32301
4a56b548-ab3d-35af-a984-e0781d142c23
算法下午茶系列
浏览量:46082
社区版块
存档分类
最新评论

神奇的Perl-哈希和数组(7)

阅读更多
声明:本神奇的Perl系列为刘兴(http://deepfuture.iteye.com/)原创,未经笔者授权,任何人和机构不能转载

1.1          pushpopshiftunshift

1push在数组末尾处增加元素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

 

2unshift在数据的起始增加元素shift在数组的起始取出一个元素。shift弹出数组的值,并返回它,unshift的队列中增加值。具体语法如下:

unshift (ARRAY,(以逗号分隔的要增加的值列表))

unshift ARRAY,要增加的值

 

shift ARRAY

比如:

    

 

 输出如下:

1

0

-1

3、通过对pushpopshiftunshift使用组合,可以实现堆栈和队列的操作。

1)堆栈,后进先出,通过pushshift组合实现

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)队列,先进先出,通过pushshift组合实现

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

 

1.2         第四个任务

BOSS要求编写一个脚本,搜索某目录下所有以PHP扩展名结尾的源代码文件,并生成一个HTML文件,其内容是按目录归类的文件列表。

我们先简单介绍一下如何操作目录及文件:

通常使用opendirclosedir 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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|$lsfile<br>";#匹配文件名写入HTML文件的body部分

      }

  }

  close DH;

  $filediryj{$filedir}=$flcount;#目录下匹配文件数目 

  say MYTXT "<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|共$flcount个匹配文件<br>";

}

#输出HTML文件尾

say MYTXT '</body>  ';

say MYTXT '</html>  ';

 

1
0
分享到:
评论

相关推荐

    神奇的perl-最佳PERL入门读物.pdf

    5. **哈希与数组**:哈希和数组是Perl中重要的数据结构。书中通过多个章节详细阐述了它们的创建、遍历、修改和操作方法,以及如何利用它们存储和处理复杂的数据。 6. **处理输入和输出-3**:进一步探讨了更高级的...

    神奇的perl-最佳Perl入门

    - 根据实际需求,使用哈希和数组完成相应的任务。 ### 知识点五:正则表达式 #### Perl正则基础 - 正则表达式是Perl的核心特性之一,用于匹配文本中的模式。 - 基础语法:使用`/pattern/`形式定义正则表达式。 #...

    mastering-perl-scripts.zip

    2. **字符串与数组操作**:Perl擅长处理文本,字符串操作和数组处理是其强项。学会如何操作字符串,以及如何使用数组和关联数组(哈希)进行数据存储和检索,对于编写脚本至关重要。 3. **文件和目录操作**:Perl...

    Note of Learning Perl--Lists and Arrays

    在Perl编程语言中,列表(Lists)和数组(Arrays)是两种非常重要的数据结构,它们在处理有序数据时起着核心作用。这篇笔记将深入探讨这两个概念,以及它们在实际编程中的应用。 列表(Lists)在Perl中是一组逗号...

    perl 程序开发教程

    第四章 列表和数组变量 一、列表 二、数组--列表的存贮 1、数组的存取 2、字符串中的方括号和变量替换 3、列表范围 4、数组的输出 5、列表/数组的长度 6、子数组 7、有关数组的库函数 第五章 文件读写 ...

    perl basic

    - **列表和数组**:详细讲解了Perl中列表和数组的概念及操作方法。 - **子程序**:讲解了如何定义和调用子程序,以及如何处理参数和返回值。 - **输入与输出**:介绍了Perl中文件句柄的概念,以及如何进行文件读写...

    Modern Perl

    - 默认变量:介绍了Perl中的默认标量变量和数组变量。 2. Perl及其社区 - 社区网站、开发站点、事件和IRC,反映了Perl强大的社区支持。 3. Perl语言特性 - 命名空间:Perl中用于封装和模块化代码的结构。 - ...

    Perl编程24学时教程

    - **列表与数组的概念**:介绍Perl中如何使用列表和数组存储数据,以及如何通过索引访问数组中的元素。 **1.5 进行文件操作** - **文件处理**:教授如何使用Perl进行文件读写操作,包括打开文件、读取文件内容、向...

    Perl入门培训资料

    3. **列表和数组.pptx** - 在Perl中,列表和数组是两种重要的数据结构。列表是一组无序的元素,而数组是有序的列表。你可以使用数组来存储和操作多组数据,Perl提供了丰富的数组操作函数,如push、pop、shift、...

    perl 入门 13-25

    9. **字符串和数组操作**:Perl提供了一系列内置函数,如chomp(), chop(), join(), split()等,用于处理字符串和数组。 10. **文件句柄和IO重定向**:Perl可以打开和操作各种类型的文件句柄,包括标准输入、输出和...

    perl语言编程--520页PDF整合版

    - **列表值和数组**:数组是一系列标量值的集合。 - **散列**:用于存储键值对。 - **型团(typeglob)和文件句柄**:用于处理文件和流。 - **输入操作符**:如命令输入(反勾号)、行输入(尖角)等。 #### 二、...

    perl脚本了解及学习

    列表和数组是Perl中最常见的数据结构之一。了解如何创建、操作和遍历这些数据结构对于处理大量数据至关重要。 ##### 3.4 文件操作 Perl提供了强大的文件处理能力,包括读写文件、目录操作等功能。熟练掌握文件操作...

    Learning_Perl_Student_Workbook(2nd,2012.01)

    - **章节概述**: 介绍Perl中的列表和数组数据结构及其操作方法。 - **学习目标**: 理解列表与数组的区别;掌握数组的操作技巧,包括排序、检索等。 - **关键知识点**: - 数组声明与初始化:@前缀的使用。 - ...

    perl的xml::simple解析文件

    XML::Simple会自动处理XML的嵌套结构,并将其转换为Perl的哈希和数组。然而,它并不总是能够完美地处理复杂的XML文档结构,因为它在处理XML时会进行一些假设,可能会丢失一些XML的特性,如命名空间、属性、文本节点...

    perl语言入门(第四版)

    #### 六、列表和数组 - **数组操作**: - 访问元素:使用索引来访问数组中的元素。 - 特殊索引:例如`@_`作为默认变量使用。 - 列表操作符:如`pop`、`push`、`shift`、`unshift`等。 - **foreach循环**: - 默认...

Global site tag (gtag.js) - Google Analytics