导航:首页 > 程序命令 > perl命令行参数

perl命令行参数

发布时间:2022-04-30 22:04:12

❶ perl 学习 关于文本存放位置的问题

my$in=$ARGV[0];这个地方应该是错的

我个人感觉你的文件读取操作是错的,建议学会使用下面书写句柄操作方式。句柄的各项操作最好在代码的前面就书写完毕,不然你的代码实在是太乱了。

给你我写过的例子,我一般下面这样写

命令参数为:perlget_pcr.pl路径samfile路径outfile

#!/usr/bin/perl
#
#2013-09-27

usestrict;
usewarnings;

@ARGV==2ordie"usage:<sam><out>";
my($samFile,$outFile)=@ARGV;

openmy$sam,'<',$samFileordie"erroropenfile:$samFile";
openmy$out,'>',$outFileordie"erroropenfile:$outFile";

while(<$sam>)
{
}
close$sam;
close$out;

❷ 如何利用perl命令行, 来执行正则表达式,寻找匹配的行

楼上的是找出其中之一呀,楼主要的是同时包含两个句子。
可以这样
perl -n -e 'print if ($_ =~/Barney/ && $_ =~ /Fred/)' test.txt >new.txt

其实这样的实现用awk命令这些很好用。楼主可以学习学习awk sed grep 等命令。
我补充个实例吧。
awk '{if (/Barney/ && /Fred/) print }' test.txt > new.txt
more test.txt | grep Barney | grep Fred >new.txt (这个管道用着很有意思)
都测试了一下,可行

❸ 用ultraedit配置perl来做perl的IDE,运行perl时需要参数时如何传!

你用的是菜单高级\工具配置里头的吗?
命令行里用:perl %f -m201002
工作目录用%d,应该可以。

❹ 求教,怎样用perl 读命令行传进来的参数,

最简单的是用@ARGV获得命令后面的参数表
如执行“perl ppp.pl 1 2 3 4 5”
ppp.pl后面跟着5个参数,在程序中可以直接通过调用$ARGV[0],$ARGV[1],$ARGV[2],$ARGV[3],$ARGV[4]来分别调取。

❺ perl脚本中$ARGV[0]是什么意思

$ARGV[0]是从命令行来的,$ARGV[0]是程序名,$ARGV[1]是第一个参数,一次类推。

例如执行下面的命令:
test.pl abc .def
或者:
perl test.pl abc def

那么:
$ARGV[0]=='test.pl'
$ARGV[1]='abc'
$ARGV[2]='def'

❻ win10用notepad++运行Perl提示无效参数

1,用Notepad++打开.pl文件,

2, F5或者Run->Run,打开运行窗口,在下面的框框里输入:Perl -w "$(FULL_CURRENT_PATH)",
然后Save,保存成一个命令就行,名字比如叫Run_Perl,快捷键我选的F9.然后按F9就可以运行了

3,不过你只能看到命令行窗口一闪而过,要让他停住需要加一行代码:my $waiting=<STDIN>;

实例代码如下:
#!usr/bin/perl
use strict;
use warnings;

my $config_file = "game_config.text";
my $config_data_file = "congif.dat";

print ( "Press Enter to quit" );
my $waiting=<STDIN>;

加入以上代码以后,按F9就能保留命令行窗口看到输出结果。

4,如果需要调试,同样的新建运行命令,不过参数改成:Perl -d "$(FULL_CURRENT_PATH)"就行了,怎么调试到时候会有提示的

5,如果需要修改调试命令的快捷键:Settings->Shortcut Mapper->Run Commands,拖到最下面就能看到我们刚才保存的命令了,编辑就行了

6,注意:如果你就这样通过Notepad++运行Perl脚本,默认的目录是Notepad++的安装目录,而非Perl脚本所在的目录,
需要在Notepad++上Plugins->Plugins Manager里面安装NppExec plugin,然后勾选NppExec --> Follow $(CURRENT_DIRECTORY), 这样以后运行Perl脚本默认目录就是当前目录了。

❼ Perl语言里面“”$.”代表什么意思

$! 根据上下文内容返回错误号或者错误串
$” 列表分隔符
$# 打印数字时默认的数字输出格式
$$ Perl解释器的进程ID
$% 当前输出通道的当前页号
$& 与上个格式匹配的字符串
$( 当前进程的组ID$) 当前进程的有效组ID
$* 设置1表示处理多行格式.现在多以/s和/m修饰符取代之.
$, 当前输出字段分隔符
$. 上次阅读的文件的当前输入行号
$/ 当前输入记录分隔符,默认情况是新行
$: 字符设置,此后的字符串将被分开,以填充连续的字段.
$; 在仿真多维数组时使用的分隔符.
$? 返回上一个外部命令的状态
$@ Perl解释器从eval语句返回的错误消息
$[ 数组中第一个元素的索引号
$\ 当前输出记录的分隔符
$] Perl解释器的子版本号
$^ 当前通道最上面的页面输出格式名字
$^A 打印前用于保存格式化数据的变量
$^D 调试标志的值
$^E 在非UNIX环境中的操作系统扩展错误信息
$^F 最大的文件捆述符数值
$^H 由编译器激活的语法检查状态
$^I 内置控制编辑器的值
$^L 发送到输出通道的走纸换页符
$^M 备用内存池的大小
$^O 操作系统名
$^P 指定当前调试值的内部变量
$^R 正则表达式块的上次求值结果
$^S 当前解释器状态
$^T 从新世纪开始算起,脚步本以秒计算的开始运行的时间
$^W 警告开关的当前值
$^X Perl二进制可执行代码的名字
$_ 默认的输入/输出和格式匹配空间
$| 控制对当前选择的输出文件句柄的缓冲
$~ 当前报告格式的名字
$` 在上个格式匹配信息前的字符串
$’ 在上个格式匹配信息后的字符串
$+ 与上个正则表达式搜索格式匹配的最后一个括号
$< 当前执行解释器的用户的真实ID
$ 含有与上个匹配正则表达式对应括号结果
$= 当前页面可打印行的数目
$> 当前进程的有效用户ID包含正在执行的脚本的文件名
$ARGV 从默认的文件句柄中读取时的当前文件名
%ENV 环境变量列表
%INC 通过do或require包含的文件列表
%SIG 信号列表及其处理方式
@_ 传给子程序的参数列表
@ARGV 传给脚本的命令行参数列表
@INC 在导入模块时需要搜索的目录列表
$-[0]和$+[0] 代表当前匹配的正则表达式在被匹配的字符串中的起始和终止的位置

linux下的shell编程 如何替换文件中的内容

可以这样做:

方法1:sed -i 's/被替换的内容/要替换成的内容/' file

方法2:sed 's/被替换的内容/要替换成的内容/g' file > file.out;mv file.out file。

(8)perl命令行参数扩展阅读:

Shell编程的常用技巧:

一、自动补齐:在linux中对于命令或路径,可以TAB键进行自动补全,以下事项需要注意:

1、只存在一个该输入字符开头的命令或路径,此时自动补全;

2、存在多个该输入字符开头的命令或路径,此时第一次点击TAB键无效,此时再次点击TAB会罗列出所有该字符开头的命令或路径,继续输入直到仅仅剩一个时自动补全;

3、如果命令已经是完整的,TAB键则是本来的移动功能;而路径的话要看命令自身的行为决定后续动作。

二、历史命令

1、history命令可以显示历史执行过的命令;

2、使用!+序号执行该序号对应的命令;

3、使用!+字符执行该字符开头的最后一次执行的指令。

三、命令别名

1、实现别名:alias ddd="df -Th";

2、删除别名:unalias ddd;

3、显示所有别名命令列表:alias;

4、存放位置:~/.bashrc (加入该文件后,重启后不会消失)。

四、重定向

1、重定向标准输入:< 命令接收输入的途径由键盘改为文件;

2、重定向标准输出:> 将命令的执行结果输出到指定文件,而不是直接显示到屏幕;

3、重定向标准输出:>> 将命令的执行结果追加输出到指定文件;

4、重定向标准错误:2> 清除指定文件的内容,并把标准错误信息保存到指定文件;

5、重定向标准错误:2>> 标准错误信息追加到指定文件;

6、重定向标准输出和标准错误:&> 将标准输出、标准错误信息全部保存到指定文件,而不是直接显示在屏幕上。

❾ perl中如何定义数组参数

PERL的参数可以使用数组,调用的时候要在%或者@前面加上\,否则就把数组的值传递给函数了,下面是调用的例子:
Run(\%o, $ch, $num);
这个函数Run使用三个参数,第一个是数组类型,函数定义就没什么特殊的:
sub Run {
my($o, $ch, $num) = @_;
my $th = IO::Socket::INET->new('PeerAddr' => $o->{'tohost'}, 'PeerPort' => $o->{'toport'});
my $read_counter=0;
}

补充:
你的问题我以为是问PERL函数的参数。

PERL使用下面的变量获取命令行参数:$#ARGV表示参数的个数,$ARGV[0]、$ARGV[1]、$ARGV[2]……依次表示各个参数

❿ Perl入门教程

2楼真是的,人家还没入门,你直接整个文件操作干嘛?
什么是Perl?

Perl 是一种最初开发用于文本操作的编程语言。现在它能应用于广泛的任务,包括系统管理、 web 开发、 网络编程、 GUI 开发和更多的普通用途。

这个语言以实用性为目标(易用、高效、完整)宁愿失去美丽(小巧、优雅、迷你)。它使用方便,且支持面向过程和面向对象编程,内置强大的文本处理支持,并有世界上最令人印象深刻的第三方模块的集中营。
运行Perl程序

在Unix命令行运行Perl程序:

perl progname.pl

另一种方法是,把这个放到你的脚本第一行:

#!/usr/bin/env perl

然后用/path/to/script.pl运行。当然,首先得让它能执行,你得chmod 755 script.pl(Unix下)。

(这里的第一行假设你有env程序。你也可以直接把你的perl解释器的路径直接放到第一行,比如#!/usr/bin/perl)
安全保障

默认情况下,Perl非常随意。为了使它更强健建议每个程序由下列行开始:

1. #!/usr/bin/perl
2. use strict;
3. use warnings;

附加的两行从perl中捕获您的代码中的各种常见的问题。它们检查不同的事情,所以你需要两个都加上。一个潜在的问题通过use strict;捕获,一旦它捕获到问题,会马上让你的程序停止运行。当然使用use warnings;时,仅仅出现警告(就好像命令行的-w选项)并不会停止程序。
基本语法概述

一个Perl脚本或程序包含一条或多条语句。这些语句只需直接写在脚本中,而不需要像main()这样的东西作为程序入口。

Perl语句以分别结束:

print "Hello, world";

以星号(#)开始的语句是注释:

# This is a comment(这是一条注释)

空白字符会被Perl忽略:

1. print
2. "Hello, world"
3. ;

……引号里的字符串除外:

1. # this would print with a linebreak in the middle
2. print "Hello
3. world";

字符串使用双引号或单引号:

1. print "Hello, world";
2. print 'Hello, world';

然而,只有双引号会“插入”变量值和像换行符(\n)这样的特殊字符(转义字符):

1. print "Hello, $name\n"; # works fine
2. print 'Hello, $name\n'; # prints $name\n literally

数字不需要引号:

print 42;

你可以使用或省略括号来传递函数的参数。它们只是在偶尔要改变或明确优先级的时候必须使用。

1. print("Hello, world\n");
2. print "Hello, world\n";

Perl变量类型

Perl有3种主要的变量类型:标量(scalars)、数组(arrays)和哈希(hashes)。

* 标量(Scalars)

一个标量表示只有一个值:

1. my $animal = "camel";
2. my $answer = 42;

标量的值可以是字符串、整数或浮点数,并且Perl会在需要的时候自动转换。你不需要预先声明你的变量类型,但是你需要在第一次使用它们的时候,使用my来声明它们。(这是use strict;所要求的)

标量可以用不用的方式使用:

1. print $animal;
2. print "The animal is $animal\n";
3. print "The square of $answer is ", $answer * $answer, "\n";

有大量的“魔法”标量的名称看上去像标点或线路噪音。这些特殊的变量用于各种目的。现在你只要知道其中一个,这就是“默认变量”$_。它被许多Perl的函数用作默认的参数,并且它被隐式设置到某些循环结构中。

print; # prints contents of $_ by default(默认打印$_的内容)

* 数组(Arrays)

数组用于表示一些值的列表:

1. my @animals = ("camel", "llama", "owl");
2. my @numbers = (23, 42, 69);
3. my @mixed = ("camel", 42, 1.23);

特殊变量$#array将返回数组最后一个元素的索引:

print $mixed[$#mixed]; # last element, prints 1.23

你可能想使用$#array + 1来得到这个数组的元素个数。别急,这很容易。在Perl预想找到一个标量值的时候(“在标量上下文”),使用@array会得到数组的元素个数:(译注:“上下文”是Perl很重要的特性之一,请查阅相关文档或在无忧Perl搜索相关内容)

if (@animals < 5) { ... } #译注:当@animals数组的元素个数少于5个的时候

当我们从数组获得元素值的时候,需要使用$,因为我们只要获取数组里的一个值;你请求一个标量,然后会获得一个标量。

从数组里获取多个值:

(译注:获取多个值,使用@,因为我们要获取数组里的几个值(列表)。)

1. @animals[0,1]; # gives ("camel", "llama");
2. @animals[0..2]; # gives ("camel", "llama", "owl");
3. @animals[1..$#animals]; # gives all except the first element

这叫“数组切片”。

你可以在列表里干些有意义的事情:

1. my @sorted = sort @animals;
2. my @backwards = reverse @numbers;

有两个特殊的数组,一个是命令行传到你脚本的参数@ARGV;另一个是传递给子程序的参数@_。
* 哈希

哈希用来表示键/值对:

1. my %fruit_color = ("apple", "red", "banana", "yellow");

你可以使用空白字符和=>操作符来美化上面的代码:

1. my %fruit_color = (
2. apple => "red",
3. banana => "yellow",
4. );

获取哈希元素:

1. $fruit_color{"apple"}; # gives "red"

你可以通过keys()和values()来获取键列表和值列表。

1. my @fruits = keys %fruit_colors;
2. my @colors = values %fruit_colors;

哈希没有特定的内部排序,然而你可以对键进行排序来遍历它。

和特殊的标量、数组一样,哈希也有特殊的。我们现在只要知道哈希%ENV包括所有环境变量



更复杂的数据类型可以使用引用来构造,允许你把列表和哈希放到另一个列表和哈希中。

引用是一个标量值,它可以引用任何其它的Perl数据类型。通过把引用存储为数组或哈希的元素值,你可以轻松创建列表/哈希中的列表/哈希。

以下示例演示了使用匿名哈希引用实现的两级哈希结构

1. my $variables = {
2. scalar => {
3. description => "single item",
4. sigil => '$',
5. },
6. array => {
7. description => "ordered list of items",
8. sigil => '@',
9. },
10. hash => {
11. description => "key/value pairs",
12. sigil => '%',
13. },
14. };
15.
16. print "Scalars begin with a $variables->{'scalar'}->{'sigil'}\n";

变量作用域

上面所有的例子都使用这种语法:

1. my $var = "value";

实际上,my不是必须的。你可以省略:(译注:前提是,你没有使用“use strict;”语句)

1. $var = "value";

但是,上面的用法将创建一个全局变量,这是一个很差的编程实践。my创建一个词法作用域变量,这个变量只在定义它们的语句块中可见(比如一段包在大括号里的语句)。

1. my $x = "foo";
2. my $some_condition = 1;
3. if ($some_condition) {
4. my $y = "bar";
5. print $x; # prints "foo"
6. print $y; # prints "bar"
7. }
8. print $x; # prints "foo"
9. print $y; # prints nothing; $y has fallen out of scope

结合使用my和在Perl脚本开头使用use strict,解释器将捕获常见的编程错误。比如,在上面的例子中,最后的print $y将引发一个编译时错误并阻止程序运行。强烈建议使用use strict语句!
条件和循环语句

Perl有许多常用的条件和循环语句。Perl 5.10甚至提供了分支语句(拼作given/when)。

条件可以是任何Perl表达式。比较和布尔条件语句中常用的逻辑运算符,请参阅有关信息的下一节中的运算符的列表。

* if

1. if ( condition ) {
2. ...
3. } elsif ( other condition ) {
4. ...
5. } else {
6. ...
7. }

还有否定版本的:

1. unless ( condition ) {
2. ...
3. }

这个否定版比if (!condition)更易读。

注意,大括号是必须的,即使代码块中只有一行。不过,这里有一个方法可以让你通过类似英语的语法来实现单行条件语句:

1. # the traditional way
2. if ($zippy) {
3. print "Yow!";
4. }
5.
6. # the Perlish post-condition way
7. print "Yow!" if $zippy;
8. print "We have no bananas" unless $bananas;

* while

1. while ( condition ) {
2. ...
3. }

为了和unless同样的理由,也有一个否定版本:

1. until ( condition ) {
2. ...
3. }

你也可以在后置条件里使用while:

print "LA LA LA\n" while 1; # loops forever

* for

跟C语言一样:

1. for ($i = 0; $i <= $max; $i++) {
2. ...
3. }

自然Perl提供了更友好的列表遍历循环foreach以后,C语言风格的for循环在Perl几乎不需要了。
* foreach

1. foreach (@array) {
2. print "This element is $_\n";
3. }
4.
5. print $list[$_] foreach 0 .. $max;
6.
7. # you don't have to use the default $_ either...
8. foreach my $key (keys %hash) {
9. print "The value of $key is $hash{$key}\n";
10. }

内置操作符和函数

Perl 附带了各种各样的内置函数。我们已经看到的几个,包括print,sort和reverse。

Perl常见操作符(运算符)

* 算术

1. + 加法
2. - 减法
3. * 乘法
4. / 除法

* 数字比较

1. == 等于
2. != 不等于
3. < 小于
4. > 大于
5. <= 小于等于
6. >= 大于等于

* 字符串比较

1. eq 等于
2. ne 不等于
3. lt 小于
4. gt 大于
5. le 小于等于
6. ge 大于等于

(为什么数字和字符串的比较运算符不同?因为我们没有不同的变量类型,并且Perl需要知道是以数字进行排序(99小于100)还是以字母进行排序(100在99前面))
* 逻辑

1. && and 和
2. || or 或
3. ! not 否

* 混合

1. = 赋值
2. . 字符串连接
3. x 字符串乘法
4. .. 范围 (建立一个列表)

一些操作符可以和=结合,像这样:

1. $a += 1; # same as $a = $a + 1
2. $a -= 1; # same as $a = $a - 1
3. $a .= "\n"; # same as $a = $a . "\n";

文件和I/O

你可以使用open()函数来打开一个文件,用于输入或输出:

1. open(my $in, "<", "input.txt") or die "Can't open input.txt: $!";
2. open(my $out, ">", "output.txt") or die "Can't open output.txt: $!";
3. open(my $log, ">>", "my.log") or die "Can't open my.log: $!";

你可以使用<>操作符从打开的文件句柄中读数据。在标量上下文中,它从文件句柄中读取一行;在列表上下文中,它读取整个文件,并将每一行作为列表的元素。

1. my $line = <$in>;
2. my @lines = <$in>;

一次性把整个文件读完,叫做“啜食(slurping)”。它能让人满意,但它可能是内存吞噬者。大多数文本文件处理可以通过Perl的循环结构,一行一行地完成。

<>操作符经常出现在while循环里:

1. while (<$in>) { # assigns each line in turn to $_
2. print "Just read in this line: $_";
3. }

我们已经看到了如何使用print()在标准输出里打印。但是,print()还能通过第一个可选参数指定一个文件句柄来打印(译注:将内容输出到指定的文件句柄中,即写入到文件句柄相关联的文件中)

1. print STDERR "This is your final warning.\n";
2. print $out $record;
3. print $log $logmessage;

当你完成了对文件句柄的操作之后,你应该使用close()来关闭文件句柄。(老实说,如果你忘记关闭了,Perl会帮你处理。)

close $in or die "$in: $!";

正则表达式

Perl对正则表达式的支持宽广而深入:

* 简单匹配

1. if (/foo/) { ... } # true if $_ contains "foo"
2. if ($a =~ /foo/) { ... } # true if $a contains "foo"

//匹配操作符(译注,完整的应该是:m//)默认操作$_,或者使用=~来绑定其它变量进行操作。
* 简单置换

1. s/foo/bar/; # replaces foo with bar in $_
2. $a =~ s/foo/bar/; # replaces foo with bar in $a
3. $a =~ s/foo/bar/g; # replaces ALL INSTANCES of foo with bar in $a

* 更复杂的正则表达式

你不仅能匹配固定的字符串。其实,你可以匹配任何你能想到的复杂正则表达式。

1. . 单个任意字符(默认不包含\n)
2. \s 一个空白字符 (空格, tab, 换行, ...)
3. \S 一个非空白字符
4. \d 一个数字 (0-9)
5. \D 一个非数字
6. \w 一个能组成单词的字符 (a-z, A-Z, 0-9, _)
7. \W 一个不能组成单词的字符
8. [aeiou] 匹配中括号内的任意一个字符
9. [^aeiou] 匹配除了中括号内列出的字符之外的任意一个字符
10. (foo|bar|baz) 匹配foo或bar或baz
11.
12. ^ 匹配开头
13. $ 匹配结尾

量词可用来指定数量:

1. * 零个或任意多个
2. + 至少一个
3. ? 零个或一个
4. {3} 3个
5. {3,6} 3到6个
6. {3,} 至少3个

一些简单的例子:

1. /^\d+/ 以一个或多个数字开头
2. /^$/ 空的,没有任何东西
3. /(\d\s){3}/ 3个带空白字符的数字
4. (比如 "3 4 5 ")
5. /(a.)+/ 匹配最少一次,含有a和任意字符
6. (比如 "abacadaf")
7.
8. # 从STDIN循环读入,并打印出非空白行:
9. while (<>) {
10. next if /^$/;
11. print;
12. }

* 圆括号捕捉

括号的另一个用法是分组。它可以用来捕捉最后使用的正则表达式匹配的结果。这些结果用$1、$2……表示。

1. # a cheap and nasty way to break an email address up into parts
2.
3. if ($email =~ /([^@]+)@(.+)/) {
4. print "Username is $1\n";
5. print "Hostname is $2\n";
6. }

子程序

写一个子程序是很容易的:

1. sub logger {
2. my $logmessage = shift;
3. open my $logfile, ">>", "my.log" or die "Could not open my.log: $!";
4. print $logfile $logmessage;
5. }

现在我们可以像使用其它内置函数一样,使用该子程序了:

1. logger("We have a logger subroutine!");

什么是shift?传递给子程序的参数保存在@_数组中。shift函数的默认参数是@_。所以my $logmessage = shift;去掉第一个参数,并将其赋值给$logmessage。

可以通过别的方法操作@_:

1. my ($logmessage, $priority) = @_; # common(通用)
2. my $logmessage = $_[0]; # uncommon, and ugly(不通过,并且很丑陋)

子程序可以返回值:

# sub square {
# my $num = shift;
# my $result = $num * $num;
# return $result;
# }

然后像这样使用它:

1. $sq = square(8);

Perl面向对象

Perl面向对象相对比较简单,这是实现使用引用什么样的对象知道自己是在Perl的概念为基础的封装。

刚开始进行Perl编程,你最常使用的Perl面向对象将是使用第三方模块,参见下文。
使用Perl模块

Perl 模块提供了一系列的功能,可帮助您避免重复劳动,它们可以通过CPAN(www.cpan.org)下载。许多流行的模块都已经包含在了Perl发行包中。

本文由无忧Perl(www.51perl.com)翻译,转载请注明本文链接:www.51perl.com/perl-brief-introction/

水平有限,错误难免,欢迎指正,并以原文为准。原文地址:http://perldoc.perl.org/perlintro.html

希望对你有用

阅读全文

与perl命令行参数相关的资料

热点内容
怎么删除一个app下载任务 浏览:713
python执行bat命令 浏览:471
什么吉他调音器app最好 浏览:33
php程序员招聘试题 浏览:14
程序员升职记第九关最优解 浏览:317
三星安卓11怎么访问data文件夹 浏览:817
华三服务器怎么设置开机自启 浏览:711
钉邮登录服务器地址 浏览:644
起源编译器适配第二款应用 浏览:433
cad弄断线条命令 浏览:463
怎么恢复手机app的安装包 浏览:300
idea重启项目不编译 浏览:495
程序员那么可爱演员表陆漓妈妈 浏览:127
linuxgadget驱动 浏览:594
华三调用acl的命令 浏览:9
资金流pdf 浏览:931
金融结算法补充条款 浏览:291
什么叫服务器怎么连接 浏览:521
空调压缩机有制冷但室内不是很冷 浏览:839
如何查解压成功 浏览:652