perl中foreach(二)
本文和大家重点讨论一下Perl foreach命令的用法,Perl foreach循环中控制变量的值会被Perl自动保存和恢复。当循环进行时,是没有办法改变其值的。循环结束时,变量的值会回到循环开始前,如果没有值则为undef。
Perl foreach用法
Perl foreach从列表(数组)的第一个元素一直循环执行到最后一个元素,一次迭代一个。控制变量(本例中为$rock)每一次迭代从列表中取出一个新值。第一次为“bedrock”,第三次为“lava”。控制变量不是这些列表元素中的一个拷贝而是这些元素本身。也就是说,如果在循环中修改这个变量,那原始列表中的元素也会被修改,如下面代码段所显示。这条性质是有用的,但是,如果不清楚,可能对其结果感到吃惊。
当循环结束时$rock的值为多少呢?其值同循环开始之前相同。Perl foreach循环中控制变量的值会被Perl自动保存和恢复。当循环进行时,是没有办法改变其值的。循环结束时,变量的值会回到循环开始前,如果没有值则为undef。这意味着如果有一个变量和控制变量有相同的名字:“$rock”,不用担心会混淆它们。
Perl中while和Perl foreach的区别
- while(defined($_=<STDIN>))
- {
- print“Isaw$_”;
- }
在列表context中使用行输入操作时,则会将所有的行(剩下的)当作一个列表,而每一行作为列表的一个元素:
- Perl foreach(<STDIN>)
- {
- print“Isaw$_”;
- }
同样,行输入操作和Perl的默认变量$_没有必然的联系。在上例中,Perl foreach默认的控制变量为$_。因此,此循环将每一行
赋给$_。
上面的看起来相似:好像有理由认为它们的行为也是相似的,不是吗?
它们在底层是很不相同的。在while循环中,Perl读入一行,将它赋给变量,然后进入循环。再回到开头,读入下一行。但
在Perl foreach循环中,由于行输入操作在列表的context中使用,因为Perl foreach需要一个列表作为其参数。因此,它在循环执行
前会将所有的输入读入。这种区别在读入一个400MB的web服务器的log文件时非常明显。通常使用while循环是一种更
好的方法,因为它一次处理一行输入。
perl中foreach(二)的更多相关文章
- perl中foreach(一)
perl中的foreach结构 首先语法 foreach $rock(qw /bedrock slate lava/){ $rock="\t$rock"; ...
- perl中的grep函数介绍
grep函数 (如果你是个的新手,你可以先跳过下面的两段,直接到 Grep vs.loops 样例这一部分,放心,在后面你还会遇到它) <pre>grep BLOCK LISTgrep E ...
- PHP中foreach()用法汇总
这篇文章主要给大家详细介绍了PHP中foreach()用法以及相关的示例,十分的细致,有需要的小伙伴可以参考下. PHP 4 引入了 foreach 结构,和 Perl 以及其他语言很像.这只是一种遍 ...
- mybatis中foreach的用法(转)
foreach一共有三种类型,分别为List,[](array),Map三种. foreach属性 属性 描述 item 循环体中的具体对象.支持属性的点路径访问,如item.age,item.inf ...
- 在 Perl 中使用 Getopt::Long 模块来接收用户命令行参数
我们在linux常常用到一个程序需要加入参数,现在了解一下 perl 中的有关控制参数的模块 Getopt::Long ,比直接使用 @ARGV 的数组强大多了.我想大家知道在 Linux 中有的参数 ...
- Perl中的正则表达
前几天用到了Perl语言,主要看了一下Perl中的正则表达式,在各种网页语言中,正则表达式在处理字符串的时候十分有用,所以这里就简单说一下在Perl中正则表达式的应用. 先上代码 #!/usr/bin ...
- Perl中的特殊内置变量详解
#!/usr/bin/perl -w @array = qw(a b c d); foreach (@array) { print $_," "; } 例子的作用就是定义一个数组并 ...
- Perl中的hash类型
hash类型 hash类型也称为字典.关联数组.映射(map)等等,其实它们都是同一种东西:键值对.每一个Key对应一个Value. hash会将key/value散列后,按序放进hash桶.散列后的 ...
- Perl中的执行上下文
perl中的上下文 在perl中,很多地方会切换上下文.所谓上下文,它的重点在于同一个表达式出现在不同地方,得到的结果不同.换句话说,同一个表达式,它表达的值不是固定的.这就像是同一个单词,在不同语境 ...
随机推荐
- B - Halloween Costumes
#include <iostream> #include <algorithm> #include <cstring> #include <cstdio> ...
- Java | 基础归纳 | Map.Entry<String, String>
public class Test { private static Map<String,String> student; private static void init() { st ...
- 如何使用程序调用webApi接口
如何使用程序调用webApi接口 在C#中,传统调用HTTP接口一般有两种办法: WebRequest/WebResponse组合的方法调用 WebClient类进行调用. 第一种方法抽象程度较低,使 ...
- Virtual Judge使用指南
https://cn.vjudge.net/ Virtual Judge并不是常规的Online Judge平台,他通过爬取其他OJ的题目,让我们可以直接在VJ上查找并提交各种OJ的题目,然后将我们的 ...
- bzoj2818: Gcd懵逼乌斯反演
由于是单组数据,强行不分块O(n)过 线性筛部分非常神奇,用了一个奇妙的推导(懒得写了) #include <bits/stdc++.h> using namespace std; ],f ...
- c51中的bit,SBIT
在51单片机的0x20~0x2f,是bdata区既可以字节寻址又可以位寻址.用法: 1 先用bdata存储类型关键字 定义变量,注意其值就是地址 .unsigned char bdata MYBITS ...
- SpringMVC中,前台jsp封装参数,绑定参数,传递参数到后台controller的过程详解
前台到后台的流程:前台jsp->后台:controller控制器层->service业务层->DAO数据访问层->数据库model模型层. 从上面流程可知,前台jsp的数据,想 ...
- Android ScrollView嵌套RecyclerView导致在三星s8曲面屏显示不全问题
当RecyclerView适配显示不全时可以单独给其嵌套一个相对布局!!!(必须是相对布局),这样在曲面屏手机就可以全部显示出来如下图所示 <RelativeLayout android:lay ...
- Eclipse介绍
Eclipse是著名的跨平台开源集成开发环境(IDE).最初主要用来Java语言开发.Eclipse的本身只是一个框架平台,通过插件使其作为C/C++.Python.PHP等其他语言的开发工具.Ecl ...
- c语言中的赋值
int s,i,len,err=0 这个是只给err赋了值还是这四个都有?