[root@dwh1 perl]# cat 1.pl
#!/usr/bin/perl
#file:lgetl.pl
##装入模块,我们通过use()使用IO::File模块,该模块包含Perl文件操作的面向对象接口
use IO::File;
#处理命令行参数 我们通过shift()从命令行中取出文件名并将其存储在名为$file的变量中
my $file = shift;
##我们调用IO::File ->new()方法来打开文件,返回一个文件句柄,存储在$fh中。
##如果你不熟悉面向对象的语法也不要着急
my $fh = IO::File->new($file);
my $line = <$fh>;
print $line;
[root@dwh1 perl]# cat 2.pl
$input = <STDIN>;
chomp ($input);
print STDOUT "$input
";
1.3.2 输入和输出操作:
如何从文件句柄中读取数据,Perl给出了两种选择:一种是一次读取一行,适用于文本文件。
另一种是读取任意长度的数据块,适用于图像文件的2进制字节流
use Errno qw (EACCES ENOENT);
my $result = open (FH,"</var/log/messages");
if (!$result){#oops,something went wrong
print "$! is $!
";
if ($! == EACCESS) {
warn "You do not have permission to open this file.";
}elsif ($! == ENOENT) {
warn "File or directory not found.";
}else {
warn "Some other error occurred:$!"
}
}
1.4.1 对象和引用:
在Perl中,引用(reference)是指向数据结构的指针。你可以使用反斜杠运算符来创建已存在的数据结构的引用。例如:
[oracle@dwh1 perl]$ cat 2.pl
$a = 'hi there';
$a_ref = $a; ##reference to a scalar
print "$a_ref is $$a_ref
";
@b = ('this','is','an','array');
$b_ref = @b; #reference to an array
print "$b_ref is @$b_ref
";
%c = (first_name =>'Fred',last_name => 'Jones');
$c_ref = \%c; ###reference to a hash
print %$c_ref;
print "
";
##-------------------------------------------------------
$a = $b_ref->[2]; ##yields "an"
$b = $c_ref->{last_name}; ##yields "Jones"
print "$a is $a
";
print "$b is $b
";
[oracle@dwh1 perl]$ perl 2.pl
$a_ref is SCALAR(0x2019560)
$a_ref is hi there
$b_ref is this is an array
last_nameJonesfirst_nameFred
$a is an
$b is Jones
如果你打印一个引用,你将获得一个类似SCALAR(0x2019560)的字符窜,该字符串指示引用的类型
和该引用在内存中的位置(没什么用处).
对象(object)也是一个引用,只不过具有一些额外的位,对象带有"是什么模块创建它"的相关信息,它以这种方式被"神圣化"(blessed)而
居于特定模块的软件包中。 这些"神圣的"引用将继续和其他引用一样工作。例如,如果一个名为$object的对象时一个神圣化的
散列数组引用,你可按如下所示索引它:
#!/usr/bin/perl
#
use strict;
##装入IO::File模块
use IO::File;
##从命令行中取到要执行行计数的文件的名字并将$counter 变量初始化为0
my $file = shift;
my $counter = 0;
my $fh = IO::File->new ($file) or die;
####$fh 是对象的引用
print "$fh is $fh
";
while (defined (my $line = $fh->getline)){
$counter++;
}
STDOUT->print("Counted $counter lines
")
H:20150226Socket>perl 1.pl 1.txt
$fh is IO::File=GLOB(0x202e0bc)
Counted 202 lines
open (FH,"<1.txt") or die;
$line = <FH>;
print "$line is $line
";
close (FH);
open (FH,"<1.txt") or die;
@lines = <FH>;
print "@lines is @lines
";
close (FH);
$a = <>;
print "$a is $a
";
@a = <>;
print "@a is @a
";
[oracle@dwh1 perl]$ cat a5.pl
open (FH,"<1.txt") or die;
while (<FH>) {
print "Found $_
";
}
[oracle@dwh1 perl]$ perl a5.pl
Found 11111111
Found 22222222
Found 33333333
<FILEHANDLE> 形式显示地给出读取数据的文件句柄。
$bytes = read(FILEHANDLE,$buffer,$length [,$offset])
$bytes = sysread(FILEHANDLE,$buffer,$length [,$offset])