perl中foreach(一)

perl中的foreach结构

首先语法

foreach $rock(qw /bedrock slate lava/){

$rock="\t$rock";

$rock .="\n";

}

Foreach 从列表(数组)的第一个元素一直循环执行到最后一个元素,一次迭代一个。控制变量(本例中为$rock)每一次迭代从列表中取出一个新值。第一次为 “ bedrock” ,第三次为 “ lava” 。控制变量不是这些列表元素中的一个拷贝而是这些元素本身。 也就是说,如果在循环中修改这个变量,那原始列表中的元素也会被修改,如下面代码段所显示。这条性质是有用的,但是,如果不清楚,可能对其结果感到吃惊。
当循环结束时$rock 的值为多少呢?其值同循环开始之前相同。foreach 循环中控制变量的值会被 Perl 自动保存和恢复。当循环进行时,是没有办法改变其值的。循环结束时,变量的值会回到循环开始前,如果没有值则为 undef。这意味着如果有一个变量和控制变量有相同的名字:“ $rock” ,不用担心会混淆它们。

需要注意的问题:

1,其他语言的循环变量一般是循环元素的拷贝,改变循环变量的值不会改变原来元素的值。但perl不同,perl的循环变量是指向循环元素的物理地址的,所以对循环变量进行更改,就是对原来的循环元素进行了更改。

2,当循环结束时,$rock(循环变量)的值恢复为循环开始前的值,这是另外一个跟其他语言的不同的地方。

#! /usr/bin/perl -W
use strict;
my @array = (1 .. 9);
my $num;
foreach $num(@array)

{

$num **= 2;
}
print "@array\n";
输出如下:
1 4 9 16 25 36 49 64 81
在这里很重要的一点在于,控制变量$num代表着@array中的一个特定项目。如在一个foreach结构的主体内修改控制变量的值,会同时改变控制变量当前代表的那个@array元素。
因此每次执行foreach内的代码时,@array的当前值都会发生变化

时间: 2024-11-05 21:51:31

perl中foreach(一)的相关文章

Perl中Schwartzian转换问题

Perl中著名的Schwartzian转换,其产生背景主要涉及到排序问题: 比如说,根据文件名以字母顺序排序,代码如下: use strict; use warnings; my @files = glob "*.xml"; #perl中文件操作符glob提供相当于shell中的通配符的功能 my @sorted_files = sort @files; #sort(),排序,默认是字母顺序排序 比如说,根据文件名长度排序,其代码如下: use strict; use warnings

Perl中的正则表达

前几天用到了Perl语言,主要看了一下Perl中的正则表达式,在各种网页语言中,正则表达式在处理字符串的时候十分有用,所以这里就简单说一下在Perl中正则表达式的应用. 先上代码 1 #!/usr/bin/perl -w 2 #use utf8; 3 #use encoding "gb2312"; 4 5 open(DATA,"<test2.txt") or die "read error"; 6 7 open(OUT,">

Perl中的特殊内置变量详解

#!/usr/bin/perl -w @array = qw(a b c d); foreach (@array) { print $_," "; } 例子的作用就是定义一个数组并把其中的元素打印出来,这里需要注意的是foreach循环部分,foreach循环的标准格式应该是: foreach $element (@array){ ...... } 其中数组@array将其中的元素依次赋值给$element,但是在上面那个程序中,我并没有这样做,在程序中,我就使用到了perl中内置的一

Perl中的骆驼精神

Perl中的哈希数据结构. 哈希是一种数据结构,由一对对的键(keys)--值(values)对来组成. 这些键和值都是任意的标量,但键总会被转换成字符串而且必须是唯一的字符串. 访问哈希元素,    $hash{$some_key}    ##和访问数组的做法类似,只是使用了花括号{}而非方括号[]. 访问哈希表中不存在的值得到undef. $family_name{'barney'} = 'rubble'        ##完成对某一哈希元素的单一赋值 访问整个哈希,    %family_

Perl中的面向对象编程

一.模块简介 模块(module)就是Perl包(package).Perl的对象基于对包中数据项的引用. 在用其它语言进行面向对象编程时,先声明一个类然后创建该类的对象(实例),特定类所有对象的行为方式是相同的,由类方法确定,可以通过定义新类或从现存类继承来创建类. 类是一个Perl包,其中包含提供对象方法的类: 方法是一个Perl子程序,类名是其第一个参数: 对象是对类中数据项的引用. 二.Perl中的类 一个Perl类是一个包.Perl5用双冒号(::)来标识基本类和继承类(之类). Pe

Perl中的骆驼精神(三)

Perl中读取标准输入:<STDIN> foreach (<STDIN>)  { print "I saw $_";} 钻石操作符<>:它的参数来源于@ARGV数组. 先检查@ARGV数组,如果为空,则从标准输入流输入.@ARGV的值可以来自命令行,也可以自己赋值. ./program  fred  barney betty     #@ARGV的值便是命令行后的三个文件. while (<>)   {  chomp;   print &

Perl中的真与假

Perl认为真值是自明的(self-evident), 表示任何事物的真值都可以计算.Perl以实用的方式来定义真值,即一个实体的真值取决于这个实体的类型.Perl总是乐观的认为:这个世界上真的东西远比假的东西多的多. Perl区别与任何其他计算机语言,Perl是语言学家创造的,而语言的意思离不开上下文语境,所以Perl中的真值都可以在标量(标量$与数组@类似于英文中的单数与复数, book 与 books的区别, 真值在现实世界中,应该就是单数,所以是标量)计算,除此之外,不会做任何类型的强制

Java中forEach, 用来遍历数组

这里的for是Java中forEach, 用来遍历数组的.for(int i : d) 就是遍历int型数组d的 每一次访问数组d的时候读取的数据放入int型的i中.和for(int i=0;i<d.length();i++)是一样的,但是forEach的可用场合较多. public class e1 {public static void main(String[] args){ int[]d=new int[] {1,2,3,4,64,1234,3124,657,22}; System.ou

[Perl系列—] 2. Perl 中的引用用法

Perl 中的引用,为什么要使用引用? 对于熟悉C语言的开发者来说, 指针这个概念一定不陌生. Perl 的引用就是指针,可以指向变量.数组.哈希表甚至子程序. Perl5中的两种Perl引用类型为硬Perl引用和符号Perl引用.符号Perl引用含有变量的名字,它对运行时创建变量名并定位很有用,基本上,符号Perl引用就象文件名或UNIX系统中的软链接.而硬Perl引用则象文件系统中的硬链接. Perl4只允许符号Perl引用,给使用造成一些困难.例如,只允许通过名字对包的符号名哈希表(名为_