分页: 1 / 1

perl脚本中的$_变量

发表于 : 2012-01-02 21:34
slimhigh
刚开始学习perl,对$_变量有些小疑惑。
我有一个文件emp.lst如下

代码: 全选

2233|a.k. shukla      |g.m.     |sales     |12/12/52|6000
9876|jai sharma       |director |production|12/03/50|7000
5678|sumit chakrobarty|d.g.m.   |marketing |19/04/43|6000
2365|barun sengupta   |director |personnel |11/05/47|7800
5423|n.k. gupta       |chairman |admin     |30/08/56|5400
1006|chanchal singhvi |director |sales     |03/09/38|6700
我想提取显示第一列的数据。我用如下代码:

代码: 全选

#!/usr/bin/perl
while(<>){
	split(/\|/);
	print "$_[0]\n";
}
我的想法是,split()函数默认拆分$_变量。然后自动填充数组@_,那么此时$_[0]存的就应该是第一列的数字了。
但是结果输出是空白行。

然后我改了代码如下:

代码: 全选

#!/usr/bin/perl
while(<>){
	@str=split(/\|/);
	print "$str[0]\n";
}
这次我得到了正确的答案。我不知到我第一次的代码为什么会错误。我的参考书上说的是:split()函数如果没有显式的赋给变量,那么默认把拆分后的字段赋值给@_数组。我有什么地方用的不对吗?

Re: perl脚本中的$_变量

发表于 : 2012-01-03 8:48
ChenFengyuan
什么参考书?
我看了下手册,没有提到默认会赋值给@_

Re: perl脚本中的$_变量

发表于 : 2012-01-03 9:39
slimhigh
ChenFengyuan 写了:什么参考书?
我看了下手册,没有提到默认会赋值给@_
《UNIX原理与应用》(印度) Sumitabha Das著 吴文国译
难道是书上写错了??!

Re: perl脚本中的$_变量

发表于 : 2012-01-03 9:40
slimhigh
ChenFengyuan 写了:什么参考书?
我看了下手册,没有提到默认会赋值给@_
能不能把手册链接发给我

Re: perl脚本中的$_变量

发表于 : 2012-01-03 11:54
Strange
$_
The default input and pattern-searching space.

@_
Within a subroutine the array @_ contains the parameters passed to that subroutine.

http://perldoc.perl.org/perlvar.html

Re: perl脚本中的$_变量

发表于 : 2012-01-03 14:23
ChenFengyuan
slimhigh 写了:
ChenFengyuan 写了:什么参考书?
我看了下手册,没有提到默认会赋值给@_
能不能把手册链接发给我
perldoc -f split

Re: perl脚本中的$_变量

发表于 : 2012-01-03 17:07
eexpress
默认会赋值给@_
没听说过。
只有$_就有缺省。

安装perl-doc包。才有Perlodc -f

Re: perl脚本中的$_变量

发表于 : 2012-01-03 20:25
ChenFengyuan
eexpress 写了:默认会赋值给@_
没听说过。
只有$_就有缺省。

安装perl-doc包。才有Perlodc -f
用gentoo的表示,装了dev-lang/perl就有perldoc :em09

Re: perl脚本中的$_变量

发表于 : 2012-01-28 15:30
tusooa

代码: 全选

● perl -we 'split /,/, "foo,bar"'
Useless use of split in void context at -e line 1.
明明是void context.咋会@_默认。

Re: perl脚本中的$_变量

发表于 : 2012-01-28 15:32
tusooa
碰到这样的问题,多use warnings;