为 Java 程序员准备的 10 分钟 Perl 教程 已翻译 100%

oschina 投递于 2013/11/08 08:53 (共 4 段, 翻译完成于 11-09)
阅读 7626
收藏 145
11
加载中

这10分钟教程并不是Java和Perl的比较。目标是探索作为Java开发人员如何快速学习Perl。以下是一些从我的角度来看的关键笔记。

1.从基础开始

不像java,Perl不需要“main”方法作为入口点。要运行一个简单的Perl程序如下:

# comment starts with "#" 
# the name is hello.pl 
print "Hello Perl!";
perl hello.pl
砖家
砖家
翻译于 2013/11/08 14:21
3

2. 日期类型

在Perl中的日期类型是非常简单,它有3种类型:标量,数组和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 
如果你想对数组进行排序,你可以简单地使用类似下面的排序功能:
foreach my $aScalar (sort @anArray){
	print $aScalar."\n";
}
为梦而来
为梦而来
翻译于 2013/11/08 15:26
2

3. 条件、循环表达式

Perl为条件和循环语句准备了if, while, for, foreach等关键字,这与Java非常类似(switch除外)。

详情请见下面的代码:

#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.正则表达式

Perl中有两种使用正则表达式的方法:m和s。

下面的代码在$str上应用了正则表达式。

$str =~ m/program(creek|river)/
如果$str的内容是“programcreek”,表达式将会返回true。这也可以被用于条件判断或循环。
cmy00cmy
cmy00cmy
翻译于 2013/11/09 15:45
1

6.传值/引用的语法

在Perl中没有必要定义方法/函数,但如果你这么做了,那将大大提高代码的模块化和可充用性。但我们需要对参数的传递非常小心。

你可以直接传递一个标量,但如果传递的是数组或哈希类就需要特别的当心。

数组:

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 );

哈系类:
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个字母的数组。

你可以简单地实现这个功能并且无需循环26次。

my @charArray = ('a'..'z' ); 
my @twoCharArray = ('aa'..'zz');

以上是第一个版本的“10分钟”,我还将根据评论持续更新本文。
cmy00cmy
cmy00cmy
翻译于 2013/11/09 16:07
1
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
加载中

评论(17)

smilemoon777
smilemoon777
有翻译就支持下,都是想着为了大家好,有意见和错误就给 人家提出来嘛,这里是学习交流的地方,希望多多看到这样的东西!
jnh
jnh

引用来自“accacc”的评论

查看了原文是数据类型。。。。

对啊,这是怎么翻译的。
黄开源中国
黄开源中国

引用来自“wxianfeng”的评论

没人提 ruby 吗?

两者处理的问题不同啊。。
wxianfeng
wxianfeng
没人提 ruby 吗?
司马他
司马他
查看了原文是数据类型。。。。
suweite
suweite
五楼骗子,那边一模一样的好不,还是日期类型,一头雾水。
方小葱
方小葱

引用来自“齐天大圣”的评论

事实证明,在语言的艺术层面上,python确实要比bash和perl优美的多。

就语法而言,py的tab让人有点受不了!另外使用一些"约定"而不是用语言核心,比如关键字来约束和表达一些语意也让一些初学者无从下手,茫然不知所措!比如self,一些内置方法等等!然后是版本之间的差异和兼容等小问题也让人心烦!
晒太阳的小猪
晒太阳的小猪
自由开源最重要!!!
Jackie_Yan
Jackie_Yan
事实证明,在语言的艺术层面上,python确实要比bash和perl优美的多。
炸酱面
炸酱面
现在看到这些使用$@{};的蛋疼语法,还是觉得当初学Python是无比正确的。
返回顶部
顶部