目录
文件以及IO
- STDOUT和STDERR是输出句柄,STDIN和ARGV是输入句柄,Perl保留的,外部关联是由你的shell建立起来的。
hello,world
err!
your name:lisi
hi,lisi
#!/usr/bin/perl
use 5.36.1;
print STDOUT "hello,world\n";
print STDERR "err!\n";
print "your name:";
my $yourName=<STDIN>;
say "hi,$yourName";
@ARGV是传入程序的参数
#!/usr/bin/perl
use 5.36.1;
for my $avg(@ARGV){
say $avg;
}
- 在Perl中对文件执行I/O操作时,都可以通过Perl中所谓的文件句柄来执行。
- 文件句柄是外部文件的内部名称。
- open函数建立内部名称和外部名称之间的关联,close函数关闭这种关联。
- open()函数最常见的方法是使用三个参数和一个返回值:
OK = open(HANDLE, MODE, PATHNAME)
OK
打开成功返回确定的值,否则返回undef
HANDLE
应该是一个undefined的标量变量,如果成功,则由open函数填充;
MODE
打开文件的访问模式和编码格式
PATHNAME
要打开的文件的外部名称
-
在HANDLE句柄上使用readline、read、getc和sysread等函数
-
MODE: “<”用于以只读模式打开文件。
如果成功,Perl将为分配一个全新的filehandle,并用对该句柄的引用填充之前未定义的$handle参数。
#!/usr/bin/perl
use 5.36.1;
my $fileName="learn1.pl";
my $myEncode=":encoding(UTF-8)";
my $fileHandle = undef;
my $openSuccess=open($fileHandle,"< $myEncode",$fileName);
foreach my $line(<$fileHandle>)
{
say $line;
};
||为短路运算符,当前面处理为false时,才会处理后面的语句。
处理读取文件错误情况
#!/usr/bin/perl
use 5.36.1;
my $fileName="learn11.pl";
my $myEncode=":encoding(UTF-8)";
my $fileHandle = undef;
my $openSuccess=open($fileHandle,"< $myEncode",$fileName) || die "$0: 不能读取 $fileName : $!";;
foreach my $line(<$fileHandle>)
{
say $line;
};
learn1.pl: 不能读取 learn11.pl : No such file or directory at learn1.pl line 6.
------------------
(program exited with code: 2)
- readline函数在文件末尾或出现错误时返回unde
#!/usr/bin/perl
use 5.36.1;
my $fileName="learn1.pl";
my $myEncode=":encoding(UTF-8)";
my $fileHandle = undef;
my $openSuccess=open($fileHandle,"< $myEncode",$fileName) || die "$0: 不能读取 $fileName : $!";
while (my $line = <$fileHandle>)
{
print $line;
}
#!/usr/bin/perl
use 5.36.1;
my $fileName="learn1.pl";
my $myEncode=":encoding(UTF-8)";
my $fileHandle = undef;
my $openSuccess=open($fileHandle,"< $myEncode",$fileName) || die "$0: 不能读取 $fileName : $!";
while (my $line = readline($fileHandle))
{
print $line;
}