神奇的perl(3)

发布时间 2023-06-29 10:54:18作者: 水泊waterPerl

文件以及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;
}