Learning Perl 笔记


All numbers have the same format internally in Prel. in fact the Perl  use double-precision floating-point value to store numbers.

Creating charaters by code point: chr(),and ord() metheds.

e.g.

$alef = chr(0x05df) ;
$code_point = ord('d') ;
 

In Perl you may write func() wit or without the parentheses. This is a general rule in Perl: except in cases whtere is changes the meaning to remove them,parentheses are always optional.

Undef is a good thing. 


Array & List:

  • A list or array may hold numbers,string,undef value,or any mixture of different scalar values. in other words,can hold different type scalar value in list or array.
  • If the subscript indicates an element that would be beyond the ene of the array,the corresponding value will be undef.
  • How to get the last element index in an array? $#array_name is the last element index.  OR -1 beause,negative array indices conut from the end of the array.
  • push,pop and shift,unshift. end & begin.
  • splice @array_name,start,length,replacement ; the third and fourth arguments is not essential. and length allow is zero.
  • foreach: foreach $var (list) {...}. It not same as Java the $var is not a copy of the list element-it  actually is the list element. That is,if you modify the control variable($var) inside the loop,you modify the element itself.
  • Deault:$_
  • revers,sort

Scalar and List Context:

  • Expressing in Perl always return the appopriate value for their context. In other words,a same thing in defferent context that it's meaning is defferent.
  • Using List-Producing expressions in Scalar Context.@people in a list context,it gives the list of elemetns. But in a scalar context,it returns the nunber of elements in the array.sortalways returns undef.reverse returns a reversed string.
  • Using Scalar-producing expresions in List Context.always get a list. e.g. @william = undef; # Gets the one-element list (undef) @betty = ();  #A correct way to emtyp an array.
  • Forcing Scalar Context in List Context. use scalar function.
  • <STDIN> in List Context: returns all of the remaining lines up to the end-of-file. each line as a separate element of the list. use EOF finishing the input. in linux is Ctrl+D,in wiondws is Ctrl+Z.

Subroutines

  • DeFinition. use the keyword sub define your own subroutine. e.g. sub fuckk {...}
  • Invoking. using the subroutine name that you want invoked with the ampersand&. e.g.&fuckk ;
  • Return Values. all Perl subroutines have a return value--Whatever calcuation is last performed in a subroutine is automatically also the return value.
  • Arguments. Perl has subroutine arguments,to pass an argument list to  the subroutne,after the subroutine invocation. e.g.$n = &fuckk(arg1,arg2...).  Perl automatically stores the paramenter list in the special array variable named @_. The @_ is private to the subroutine.
  • Overwrite. if you define two same-name subroutines,the last will overwrite the first.
  • Private Variable in Subrouines. Private variables called lexical variables at any time with the my operator. e.g. my($n1 $n2) ; by the way,By default,in Perl all variables are global variable. attenionmy has lexical scope. like in C local variable.
  • The use strict pragma. impose a little discipline.
  • The return operator. returns a value from a subroutine immediately.
  • state variales. Persistent Private Variables pretty like static in C,but state  is a priavet variable. you can make any varibale(scalar and list) type a state variable; but you can't initalize a state variable in list contexts. e.g. state @array = qw(a b c); # error

Input and Output

  • Input to Standard Input. STDIN this is standard input filehandle. the <filehandle> of <STDIN> is line_input operator and gives you the next line with \n.
  • -  the hyphen. If you use a hyphen as one of the argumets pass in perl,that the hyphen means standard input as well. If you just only a hyphen argument you can omiss it. because if no invocation arguments,the program should process the standard input stream.
  • The @ARGV array. This is a special array that is preset by Perl interpreter as the list of the invocation arguments. In other words,It store command arguments. but is can bu changed.
  • <> the Diamond Operator. read line data from the @ARGV array.  It also is line_input operator.
    while (<>) { chomp ;...}

  • Formatted Output with printf. e.g.printf "Hello,%s your age is %d.\n","Tom",18 ; the % sign is called conversions. print a number in what's generally a good way,use %g.decimal use %d,foalt use %f,strng use %s
  • Arrays and print. It is defferent print @arry and print "@arry". the print "@array" has a whilespace speasue two elements but print @array is not.
  • Filehandles. a filehandle is the name in Perl program for an I/O connection between your Perl process and the outside world. In fact,It's just the name of connection,not necessarily the name of files. 
  • The six special built-in  filehandlle name. Its is STDIN,STDOUT,STDERR,ARGV,DATA,ARGVOUT. Perl already uses for its own purposes.
  • Filehandles name. Before Perl 5.6,all filehandle names were barewords,and Perl 5.6 added the ability to store a filehandle reference in a normal scalar variable.
  • opening a filehandle. If you use bareword as a filehandle name,the open styanx is open LOG,'[< | > | >>] file' ; or open LOG,' < | > | >>','fle' ; in 5.6 add "three-argument" open. the file can be a scalar. if the file is a scalar you must use "..." around arugments. In default open a file is only read,if you like this invocate open LGO,'file' ; If filehandles in a Scalar. e.g. open my $log_fh,'<','file' ;
  • Specify an file encoding. If you use  the three-arugments open you can specify an encoding. e.g. open LOG,'<:encoding(UTF-8)','file' ; you can get a list of all of the encodings that perl understands with a Perl command: # perl -MEncode -le "print for Encode->encodings(':all')"
  • use binmode func tell output Unicode to STDOUT. e.g. binmode STDOUT,':encoding(UTF-8)' ; if you don't do this,you might get a warning "Wide charater in print at test line .."
  • Use :crlf Specify file line endings. in DOS the file each line ends with CR-LF pair.(also as "\r\n"). Unix line endings only use the LF. The :crlf encoding can translate a newline to \r\n. e.g. open LOG,'<:crlf','file' ; this is open a only read DOS file Prel can translate crfl to newline.  e.g. open LOG,'>:crlf','file'; this is open a write file,write this file each lien endings with crlf. (from newlne to crlf).
  • Closeing a Filehandle. close operator close it. e.g. close LOG ;
  • Use die Show Fatal errors. e.g. die "Has a error: $!\n" ;  the $! stroe a  human-readable complaint error mssage form system. and it well exit the program immidealy.
  • Use warn show a Warning message. the warn show a message to STDERR,but don't exit the program.
  • Automaticlly die-ing. Starting with Perl 5.10,the autodie pragma is part of the Standard Libaray. So you can use autodie ; with open LOG,'>>','file' ; don't write die message.
  • Changing the Default STD flehandle. There are some ways to change the Default STD filehandle. one is you cat  useingselect operator chanages default output filehandle. e.g select LOG ; select return currently output filehanlds. the two way is reopen a Standard filehandle e.g. open STDERR,">>","error.log" ;

相关文章

1. 如何去重 #!/usr/bin/perl use strict; my %hash; while(...
最近写了一个perl脚本,实现的功能是将表格中其中两列的数据...
表的数据字典格式如下:如果手动写MySQL建表语句,确认麻烦,...
巡检类工作经常会出具日报,最近在原有日报的基础上又新增了...
在实际生产环境中,常常需要从后台日志中截取报文,报文的形...
最近写的一个perl程序,通过关键词匹配统计其出现的频率,让...