Perl 6 控制流:Control Flow

一说到Perl 6,就得和Perl 5比较,Perl 5 在 feature 中加入了switch等方便的控制流,但是如果用“方便”来形容Perl 5, Perl 6就可以说成“灵活多变”,像Python的list/dict/set generator,而Perl 6 把所有的控制流都变成了Python 有的generator了,灵活的像Water Dance 。

需要注意:

  • 语句块末尾可以加;,变成语句执行
  • 控制流都可以返回值,而且即使倒置结构也可以用 block 了
    • Perl 5只能正常的用block,倒置的只能用单语句
  • 新加了 with without orwith
  • 把 for 拆成了 for 和 loop

语句块

{...}; #后面可以加; 这样就成了statement,会被立即执行;默认是不会立即执行的

# do可以让block立即执行
# 并和sub/method一样,返回最后执行的语句
do {...};
# do的block也只有需要返回值的时候才被执行
# do也可以在没有{}的情况用,只有是一个 expression 最后的部分

quietly {};
# 不会烦人地显示 warnings

once {};
#只运行一次,即使在 loop 中也一样一次

for循环

# -> $item 可以省略,默认是用$_
for @LIST -> $item {...}
# $_同样可以省略
for @LIST {...}

# 数组
for @LIST.kv -> $idx, $val {...}
# 哈希
for %HASH.kv -> $key, $val {...}

# <->在 ->的基础上加了一个<,表示可读可写
for @LIST <-> $_ {...}
#这样$_就可读可写了,默认->是只可读

#可以把 for 控制流用 () 括起来得到返回值
my @a = (for 1,2,3 { $_ * 2 });
my @a = do for 1,2,3 { $_ * 2 }; # do 就相当于那对括号

# C 语言格式变成了
loop (my $i = 0; $i < 10; $i++) {...}
# 同样可以把 loop loop 用()括起来得到返回值
my @b = (loop(my $i = 0; $i < 3; $i++){ $a[$i] * 2});

while

while True/False {...}
until True/False {...}
{...} while True/False
{...} until True/False
# 可以把 while/until loop 用()括起来得到返回值

没有dowhile这样的组合了

#可以用
repeat {...} while True/False;
repeat {...} until True/False;
# 和 Perl5 一样也有 next/last/redo

If

# condition 部分没必要()起来,像Apple Swift语言
if True/False {...} 

# Perl5中支持的开始支持了
{...} if True/False # statement modifier form。

# 可以把if 用()括起来得到返回值
(if True/False {...})
({...} if True/False)
#要么返回最后执行的语句的值,要么空 list

# else/elsif块
if True/False {...} else {...}
if True/False {...} elsif {...} else {...}
#else 任何时候都是可以没有的
#不能像 Python 中那样 {...} if True/False else {...}

# 可以用()括起来得到返回值
$ok = (if True/False {...} else {...});

#### 有一点不可思议的是,
# else 可以获取上一个执行的 if/elsif 的值,格式是
if {} else -> $a {...}
# $a就是上次执行的 if block 的结果

# unless语句,不能有 else/elsif
unless True/False {...}
# 可以用倒置语句块
{} unless True/False

switch/case语句流,Perl 5中的feature

given EXPR {
    when EXPR { ... }
    when EXPR { ... }
    default { ... }
}
given EXPR {...}
{...}(EXPR)
# 和 for 一样也是使用$_,也可以没有when/default
# 注意 when 的顺序
# 用proceed 表示立即退出当前 when/default,继续后续的 when/default,但不会退出 given
# 用succeed 表示立即退出 given 块
# 同样可以把 given block 用()括起来得到返回值

with/orwith/without

with expression {...}
orwith expression {...}
without expression {...}
# 和 if 一样,但会检查 expression 是否定义
#上面的分别和 if elsif unless 对应

gather/take

gather { take ...; ...}
#有点多选项的意思,只要满足条件就返回,对返回个数没有限制
# generate values lazily
# scoped dynamically
#上面的这两个点 so lazy

LABEL

#while/until/for loop 可以有 LABEL,可以和 redo/next/last 一起使用
#当然也可以goto连用

Reference

  1. Control Flow in Perl6
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,236评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,867评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,715评论 0 340
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,899评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,895评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,733评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,085评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,722评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,025评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,696评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,816评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,447评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,057评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,254评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,204评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,561评论 2 343

推荐阅读更多精彩内容