Perl 风格:避免字节处理
- C 程序员常常试图逐字节处理字符串。不要这样做!Perl 可以轻松地大块处理数据。
- 不要使用
getc
。一次性抓取整行并操作。 即使在 C 中通常逐字符执行的操作,如词法分析,也应采用不同的方法。例如
@chars = split //, $input; while (@chars) { $c = shift @chars; # State machine; }
太底层了。尝试更类似于
sub parse_expr { local $_ = shift; my @tokens = (); my $paren = 0; my $want_term = 1; while (length) { s/^\s*//; if (s/^\(//) { return unless $want_term; push @tokens, '('; $paren++; $want_term = 1; next; } if (s/^\)//) { return if $want_term; push @tokens, ')'; if ($paren < 1) { return; } --$paren; $want_term = 0; next; } if (s/^and\b//i || s/^&&?//) { return if $want_term; push @tokens, '&'; $want_term = 1; next; } if (s/^or\b//i || s/^\|\|?//) { return if $want_term; push @tokens, '|'; $want_term = 1; next; } if (s/^not\b//i || s/^~// || s/^!//) { return unless $want_term; push @tokens, '~'; $want_term = 1; next; } if (s/^(\w+)//) { push @tokens, '&' unless $want_term; push @tokens, $1 . '()'; $want_term = 0; next; } return; } return "@tokens"; }
转到 避免符号引用
返回到 使用 foreach() 循环
返回到 索引
版权 © 1998, Tom Christiansen 所有权利保留。
标签
反馈
这篇文章有什么问题吗?请在 GitHub 上打开一个问题或拉取请求来帮助我们。