perl命令行应用程序详_向程序发送命令时出现问题word_word 向程序发送命令时出现问题(2)

电脑杂谈  发布时间:2019-08-06 09:02:28  来源:网络整理

1:-l参数,用来给每一个输出加\n.例如

$perl-le'print"HelloWorld"'

使用已有的参数我们可以写出很有效的Perl命令行程序.常见的UnixI/O重定向:

$perl-pe'somecode'>output.txt

这个程序从input.txt读取数据,然后做一些处理再输出到output.txt.你当然也可以把输出重定向到同一个文件里.

上面的程序可以通过-i参数做的更简单些.

2:-i

把源文件更名然后从这个更名的源文件里读取.最后把处理后的数据写入源文件.

如果-i后跟有其他字符串,这个字符串与源文件名合成后来生成一个新的文件名.

此文件会被用来储存原始文件以免被-i参数覆盖.

这个例子把所有php字符替换为perl:

$perl-i-pe's/\bPHP\b/Perl/g'file.txt

word 向程序发送命令时出现问题_perl命令行应用程序详_向程序发送命令时出现问题word

程序读取文件的每一行,然后替换字符,处理后的数据重新写入(即覆盖)源文件.

如果不想覆盖源文件,可以使用

$perl-i.bak-pe's/\bPHP\b/Perl/g'file.txt

这里处理过的数据写入file.txt,file.txt.bak是源文件的备份.

perl经典的例子

问题:

遇到一问题:

aaa@domain.com2

aaa@domain.com111

bbb@home.com2222

bbb@home.com1

类似这种输出,我想把他们变换成下面形式:

aaa@domain.com113

bbb@home.com2223

就是将相同邮箱名称后面的数字相加。各位大侠能否给些思路如何用perl来实现。

答案:perl-anle'$cnt{$F[0]}+=$F[1];END{print"$_\t$cnt{$_}"forkeys%cnt}'urfile

如果熟悉了上面几个Perl命令行参数的用法,上面的这个命令应该很好理解:

每次读取urfile的一行,由于使用了-a,打开自动分离(split)模式.空格是缺省的分离号.输入根据分离号被分离然后放入缺省数组@F中,

以文件的第一行为例子$F[0]就是aaa@domain.com,$F[1]就是2

$cnt{$F[0]}+=$F[1]就是一个哈希数组,以$F[0]为key,$F[1]为value,把相同key的数值都叠加起来.然后把文件的每一行都这样处理一次.

从头到尾扫描数组,每扫描到一个数字,判断该数字是否在哈希表中,如果该哈希表还没有这个数字,那么加入哈希表,如果已经存在,则返回该数字。多数情况下,简单的 for 循环可以逐个遍历那些属性,特别是它们使用有序的数字作为名称的时候,比如数组,或者伪数组(像由 dom 创建的 nodelist 就是伪数组)。像这种数据多的,应该先存放到数组中(因为本例显示的是数字,所以可以直接用循环里面的变量,如果是值,要先存放到数组中,根据索引取出来)。

下面的是上面行命令的文本形式:

#!/usr/bin/perl usestrict; usewarnings;

my%hash; while(<>){ chomp;

my@array=split; $hash{$array[0]}+=$array[1]; }

-- defines a factorial function function fact (n) if n == 0 then return 1 else return n * fact(n-1) end end print("enter a number:") a = io.read("*number") -- read a number print(fact(a)) 。 print "word %s\t\t start: %d \t\t end:%d" % (tk[0],tk[1],tk[2])。t = { age = 27 add = function(self, n) selfself.age = self.age+n end } print(t.age) 27 t.add(t, 10) print(t.age) 37 。


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-118249-2.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...