《寫給Java開發者的10分鐘Perl指南》
作者:chszs,轉載需注明。部落格首頁:
http://blog.csdn.net/chszs原文見:
http://www.programcreek.com/2012/09/10-minutes-perl-tutorial-for-java-developer/本文并非Java語言和Perl語言的比較文,而是為Java程式員寫的快速Perl入門。下面介紹一些要點。
1、基礎
與Java不同,Perl中沒有main方法這樣的入口點,要運作下面的Perl程式,比如:
# comment starts with "#"
# the name is hello.pl
print "Hello Perl!";
隻需執行:
perl hello.pl
2、日期類型
Perl語言中的日期類型非常簡單,隻有3種類型:Scalar、Array和Hash。
Scalar類型即标量,是單個的值,它基本上是除了Array和Hash類型的所有一切。
Array類型是一個數組,可以包含不同類型的元素,比如它可以同時包含整數元素和字元串元素的數組。
Hash類型與Java語言的HashMap類相似。
下面的代碼顯示了它們的用法:
#claim a hash and assign some values
my %aHash;
$aHash{'a'}=0;
$aHash{'b'}=1;
$aHash{'c'}=2;
$aHash{'d'}=3;
$aHash{'e'}=4;
#put all keys to an array
my @anArray = keys (%aHash);
#loop array and output each scalar
foreach my $aScalar (@anArray){
print $aScalar."\n";
}
執行輸出:
e
c
a
b
d
如果想對數組排序,可以簡單的使用sort函數,如下:
foreach my $aScalar (sort @anArray){
print $aScalar."\n";
}
3、條件語句和循環語句
Perl語言的條件語句和循環語句有if、while、for、foreach等關鍵字,它們和Java文法中的對應關鍵字很相似。
下面的例子說明了這一點:
#if
my $condition = 0;
if( $condition == 0){
print "=0\n";
}elsif($condition == 1){
print "=1\n";
}else{
print "others\n";
}
#while
while($condition < 5){
print $condition;
$condition++;
}
for(my $i=0; $i< 5; $i++){
print $i;
}
#foreach
my @anArray = ("a", 1, 'c');
foreach my $aScalar (sort @anArray){
print $aScalar."\n";
}
4、檔案讀/寫
下面的例子說明了如何從檔案中讀取内容,以及如何向檔案寫入内容。
要注意“>”和“>>”的不同,前者是建立新檔案,後者是向檔案添加内容。
#read from a file
my $file = "input.txt";
open(my $fh, "<", $file) or die "cannot open < $file!";
while ( my $aline = <$fh> ) {
#chomp so no new line character
chomp($aline);
print $aline;
}
close $fh;
# write to a file
my $output = "output.txt";
open (my $fhOutput, ">", $output) or die("Error: Cannot open $output file!");
print $fhOutput "something";
close $fhOutput;
5、正規表達式
要使用正規表達式,主要會用到2個函數:m和s。
下面的代碼講述了用正規表達式比對字元串$str:
$str =~ m/program(creek|river)/
假設字元串$str的值為“programcreek”,上面的表達式傳回true,可用作條件表達式或循環的條件。
6、值傳遞或引用傳遞
Perl程式中無需定義方法或函數,但是呢,定義方法或函數可以改進代碼的品質,提高代碼的重用性。是以,我們需要關心參數傳遞。
可以直接傳遞标量Scalar,但是當涉及到數組或Hash時,需引起注意。
my @testArray = (1, 3, 2);
#In sub
sub processArrayByReference($) {
my $arrayref = shift;
my @array = @$arrayref;
#...
}
#In sub processarray:
sub processArrayByValue($){
my @array = @_;
#...
}
processArrayByValue(@testArray);
processArrayByReference( \@testArray );
Hash
sub printHash($) {
my %hash = %{ shift() };
for my $key ( sort keys %hash ) {
my $value = $hash{$key};
print "$key => $value\n";
}
}
printHash(\%twoLettersCount);
7、小技巧
1)通過字元串的每個字元進行循環
my @lineCharArray = split('',$aline);
foreach my $character (@lineCharArray){
print $character."\n";
}
2)建立一個包含26個字母的數組
my @charArray = ('a'..'z' );
my @twoCharArray = ('aa'..'zz');