- 求职 : 软件工程师
- 论坛徽章:
- 3
|
学习 Perl 语言,很容易把注意力放在一些很少用到的特性上,因为 Perl 的各种古怪特性实在是太多了。Perl 语言有许多的糟粕,是没有必要深入了解的。例如 delete array 的行为。
Perl 语言的变量有标量和数组,还有哈希。所有的数值都能用标量形式表示,其实只要学会用标量表示数据就够了。- my $str = 'aaa';
- my $array = [1,2,3];
- my $hash = { a => 1 };
复制代码 而下列用法完全可以不用:- my @array = (1,2,3);
- my %hash = ( a => 1 );
复制代码 而 @array 的表示方法,只是把它当成一个可以容纳多个标量的容器:- my ($name, $value) = @args;
复制代码 Perl5 不能对比数据结构,所以当你对比一个嵌套的数据结构时,最好使用 JSON 模块:- use JSON qw(encode_json);
- my $data_one = [1,2,[3,4]];
- my $data_two = [1,2,[3,4]];
- if (encode_json($data_one) eq encode_json($data_two)) {
- say "data is same";
- }
复制代码 如果这样写,就错了:- if ($data_one eq $data_two) {
- say "data is same";
- }
复制代码 要想使操作引用的行为和直接量相同,最好声明:- use experimental qw(autoderef);
复制代码 这样下面的语句就能使用了:- for my $key (keys $hash) {
- say "key is $key";
- }
- for my $value (values $array) {
- # ...
- }
- push $array, $key;
- shift $array;
- pop $array;
- delete $hash->{$key};
- exists $hash->{$key};
复制代码 引用最方便的地方就是没有数据复制成本,但如果不想修改原数据,需要对数据结构进行复制:- my $copy_array = [ @{ $array } ];
复制代码 因为 splice, push, shift, unshift, pop, delete 等内置函数会直接在数据本身进行修改。
substr 与其说是内置函数,不如说是 Perl 的关键字, 因为下面的代码是错误的:- my ($str, $pos, $len) = @args;
- my $sub_str = substr(@args); # error
- my $sub_str = substr($str, $pos, $len); # ok
复制代码 Perl 还有很多特性容易让人迷惑,如果想了解。就看看 Ruby, Python,看同样的算法,是怎么样实现的。 |
评分
-
查看全部评分
|