安装 Raku
raku -v理解差异
Compatibility Module
在 Raku 中临时运行 Perl 5 代码:
use v5; # 启用 Perl 5 兼容模式(有限支持)
或使用 Inline::Perl5 模块直接调用 Perl 5 代码:
use Inline::Perl5;
my $p5 = Inline::Perl5.new;
$p5.call('perl5_function', @args);
转换脚本
perl6-begin 工具可进行基础语法转换(但需手动检查)。perl6-begin your_script.pl > your_script.raku
| Perl 5 语法 | Raku 语法 | 说明 |
|---|---|---|
$ 标量, @ 数组 |
符号不变,但语义变化 | Raku 中 @ 无法直接插值到字符串 |
@array[1] |
@array[1] 合法 |
Raku 允许直接索引数组 |
foreach |
for |
foreach 关键字移除 |
$hash{key} |
%hash{key} 或 %hash<key> |
哈希访问必须用 % |
$_ 默认变量 |
$_ 仍存在,但更常用 $^ 占位参数 |
|
=~ 匹配运算符 |
~~ 智能匹配 |
正则语法大幅变更 |
qw() |
qw<> 或 <...> |
引号单词语法变化 |
正则表达式迁移示例:
# Perl 5
$str =~ /pattern(.*)/;
# Raku
$str ~~ /pattern(.*)/; # 或使用新的正则语法:
$str ~~ m:g/pattern(.*)/;
混合运行
使用 Inline::Perl5 逐步替换模块/函数,保持系统可运行。
测试驱动
Test 模块(类似 Perl 5 的 Test::More):use Test;
is add(2,3), 5, 'function works';
done-testing;
模块替代方案
Moose → Raku 内置对象系统(class)DBI → DB::Pg / DB::MySQLTemplate::Toolkit → Template::Mustache上下文变化
my @a = (1,2,3); my $last = pop @a; # Perl 5
my @a = (1,2,3); my $last = @a.pop; # Raku 使用面向对象语法
引用消除
Raku 无需引用即可创建复杂数据结构:
my %hash = ( key => [1,2,3] ); # 自动处理嵌套
字符串连接
my $str = $a . $b; # Perl 5
my $str = $a ~ $b; # Raku 使用 ~ 运算符
利用 Raku 新特性
start、await、supply/react。性能测试
raku --profile 分析性能瓶颈。官方文档
社区支持
#raku on Libera ChatInline::Perl5 桥接。通过系统规划和测试,迁移过程可平稳进行。如遇具体代码问题,可提供片段进一步分析。