天天看點

寫給Java開發者的10分鐘Perl指南 《寫給Java開發者的10分鐘Perl指南》

 《寫給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');