|
http://hyperpolyglot.org/scripting
比较perl+python
[table][tr][td] [/td][td]perl (1987)
[/td][td]python (1991)
[/td][/tr][tr][td=3,1]基础
[/td][/tr][tr][td] 模块导入
[/td][td] use strict;
[/td][td] import os, re, sys
[/td][/tr][tr][td] 版本查看
[/td][td] $ perl -v
[/td][td] $ python -V
[/td][/tr][tr][td] 执行脚本
[/td][td] $ perl foo.pl
[/td][td] $ python foo.py
[/td][/tr][tr][td] 交互模式
[/td][td] $ perl -de 0
[/td][td] $ python
[/td][/tr][tr][td] 执行语句
[/td][td] $ perl -e 'print("hi\n")'
[/td][td] $ python -c "print('hi')"
[/td][/tr][tr][td] 语句分隔
[/td][td] ;
[/td][td] \n (newline)
or ;
[/td][/tr][tr][td] 语句块
[/td][td] {}
[/td][td] Indent
[/td][/tr][tr][td] 注释
[/td][td] # comment
[/td][td] # comment
[/td][/tr][tr][td] 多行注释
[/td][td] =for
comment line
another line
=cut
[/td][td] use triple quote string literal:
'''comment line
another line'''
[/td][/tr][tr][td=3,1]变量和操作符
[/td][/tr][tr][td] 赋值
[/td][td] $v = 1;
[/td][td] v = 1
[/td][/tr][tr][td] 赋值
[/td][td] ($x, $y, $z) = (1, 2, 3);
# 3 is discarded:
($x, $y) = (1, 2, 3);
# $z set to undef:
($x, $y, $z) = (1, 2);
[/td][td] x, y, z = 1, 2, 3
# raises ValueError:
x, y = 1, 2, 3
# raises ValueError:
x, y, z = 1, 2
[/td][/tr][tr][td] 交换
[/td][td] ($x, $y) = ($y, $x);
[/td][td] x, y = y, x
[/td][/tr][tr][td] 操作符
[/td][td] += -= *= none /= %= **=
.= x=
&&= ||= ^=
= &= |= ^=
[/td][td] # do not return values:
+= -= *= /= //= %= **=
+= *=
&= |= ^=
= &= |= ^=
[/td][/tr][tr][td] 自增
[/td][td] my $x = 1;
my $y = ++$x;
my $z = --$y;
[/td][td] none
[/td][/tr][tr][td] 局部变量
[/td][td] my $v;
my (@a, %d);
my $x = 1;
my ($y, $z) = (2, 3);
[/td][td] # in function body:
v = None
a, d = [], {}
x = 1
y, z = 2, 3
[/td][/tr][tr][td] 全局变量
[/td][td] our ($g1, $g2) = (7, 8);
sub swap_globals {
($g1, $g2) = ($g2, $g1);
}
[/td][td] g1, g2 = 7, 8
def swap_globals():
global g1, g2
g1, g2 = g2, g1
[/td][/tr][tr][td] 常量
[/td][td] use constant PI => 3.14;
[/td][td] # uppercase identifiers
# constant by convention
PI = 3.14
[/td][/tr][tr][td] 空
[/td][td] undef
[/td][td] None
[/td][/tr][tr][td] 空测试
[/td][td] ! defined $v
[/td][td] v == None
v is None
[/td][/tr][tr][td] 访问未定义变量
[/td][td] error under use strict; otherwise undef
[/td][td] raises NameError
[/td][/tr][tr][td] 真假
[/td][td] 1 ""
[/td][td] True False
[/td][/tr][tr][td] 假
[/td][td] undef 0 0.0 "" "0" ()
[/td][td] False None 0 0.0 '' [] {}
[/td][/tr][tr][td] 逻辑运算
[/td][td] && || !
lower precedence:
and or xor not
[/td][td] and or not
[/td][/tr][tr][td] 条件
[/td][td] $x > 0 ? $x : -$x
[/td][td] x if x > 0 else -x
[/td][/tr][tr][td] 比较
[/td][td] numbers only: == != > < >= < >= & | ^ ~
[/td][td] > & | ^ ~
[/td][/tr][tr][td] 其他进制
[/td][td] 0b101010
052
0x2a
[/td][td] 0b101010
052
0x2a
[/td][/tr][tr][td=3,1]字符串操作
[/td][/tr][tr][td] 字符串
[/td][td] "don't say \"no\""
'don\'t say "no"'
[/td][td] 'don\'t say "no"'
"don't say \"no\""
"don't " 'say "no"'
'''don't say "no"'''
"""don't say "no\""""
[/td][/tr][tr][td] 多行字符串
[/td][td] yes
[/td][td] triple quote literals only
[/td][/tr][tr][td] 转义
[/td][td] double quoted:
\a \b \cx \e \f \n \r \t \xhh \x{hhhh} \ooo Perl 5.14: \o{ooo}
single quoted:
\' \\
[/td][td] single and double quoted:
\newline \\ \' \" \a \b \f \n \r \t \v \ooo \xhh
Python 3:
\uhhhh \Uhhhhhhhh
[/td][/tr][tr][td] 变量替换
[/td][td] my $count = 3;
my $item = "ball";
print "$count ${item}s\n";
[/td][td] count = 3
item = 'ball'
print(‘%s %s’ % (count, item))
[/td][/tr][tr][td] sprintf
[/td][td] my $fmt = "lorem %s %d %f";
sprintf($fmt, "ipsum", 13, 3.7)
[/td][td] 'lorem %s %d %f' % ('ipsum', 13, 3.7)
fmt = 'lorem {0} {1} {2}'
fmt.format('ipsum', 13, 3.7)
[/td][/tr][tr][td] here document
[/td][td] $word = "amet";
$s = |
|