Perl Learning - 9 (printf, filehandle, open, close)
发布时间:2020-12-15 21:02:39 所属栏目:大数据 来源:网络整理
导读:printf is powerer to control the outputs,it's used with a format string,and a list of elements. ? printf "Hello,$s; your password expires in %d days!n",$user,$days_to_die; printf "in %d days!n",17.85;?# in 17 days! ? Format string has so
printf is powerer to control the outputs,it's used with a format string,and a list of elements.
?
printf "Hello,$s; your password expires in %d days!n",$user,$days_to_die;
printf "in %d days!n",17.85;?# in 17 days!
?
Format string has some kind of 'conversion',each format string starts with '%' and ends with a character.
The number of elements and format strings must be the same,otherwise printf doesn't work.
?
%d gets integer number,like %d ... 17.85 is 17.
%s gets characters,-15 means align by left. %f gets fload number.
?
printf "%6dn",42;
printf "%2dn",2e3+1.95; printf "%15sn","wilma"; printf "%-15sn","flintstone";
printf "%12fn",6*7+2/3;
printf "%12.3fn",6*7+2/3; printf "%12.0fn",6*7+2/3;
?
$ ./printf.pl
Hello,Larry; your password expires in 5 days! in 17 days! ??? 42 2001 ????????? wilma flintstone ?? 42.666667 ????? 42.667 ????????? 43
?
If you want output a '%',use '%%','%' don't work.
printf "Monthly interest rate: %.2f%%n",5.25/12;?# Monthly interest rate: 0.44%
?
Filehandle is the name of I/O connection in Perl program,is the bridge between perl and outside world.
It's name of connection,but not name of file.
?
Perl has six buildin filehandle: STDIN,STDOUT,STDERR,DATA,ARGV,ARGVOUT
STDIN=standard input STDOUT=standard output STDERR=standard error
?
If you need other filehandles,use operater 'open'.
open CONFIG,"dino";?# input from dino
open CONFIG,"<dino";?# input from dino open BEDROCK,">fred";?# output to fred,cover the original contents of fred open LOG,">>logile";?# append to fred
?
The upper-case are filehandles,the lower-case are filenames.
When opening a filehandle,the default action is get input from file,so the first two has same results.
We can use expressions with filenames.
?
my $selected_output="my_output";
open LOG,"> $selected_output";?# note the space after '>'
?
Use 'close' to close a filehandle.
close BEDROCK;
?
if(!open LOG,">>logfile"){
?die "Cannot create logfile:$!"; ?} ? 'die' will end program when 'open' fails,and tell you it cannot open logfile. $! is the system error messages that shell throws out.
?
$ ./die_open.pl
Cannot create logfile:Permission denied at ./die_open.pl line 4.
?
If you don't want the program name,just put a "n" at the end.
$ cat die_open.pl
#!/usr/bin/perl
if(!open LOG,">>logfile"){
??????? die "Cannot create logfile:$!n"; ??????? } ?? $ ./die_open.pl Cannot create logfile:Permission denied
?
After a filehandler opens,it can be used as STDIN to get input lines.
?
if(!open PASSWD,"/etc/passwd"){
?die "How did you get logged in?($!)"; ?} while(<PASSWD>){ ?chomp; ?print "$_n"; ?} ? $ ./die_open.pl root:x:0:0:RHEL5:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin ...... Exercises: 1. Write a program,print the reversed lines from input. #!/usr/bin/perl while(<>){ ??? push @lines,$_; } @lines=reverse @lines; foreach(@lines){ ??? print $_; } ########################################### 2. Write a program,user input lines of characters,then print the formatted lines that right align by 20 bits. #!/usr/bin/perl print "1234567890" x 7 . "n"; while(<>){ ??? chomp; ??? printf "%20sn",$_; } ########################################### 3. Modify the above program,let user input the align width. #!/usr/bin/perl chomp($width=<STDIN>); print "1234567890" x $width . "n"; while(<>){ ??? chomp; ??? printf "%${width}sn",$_; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |