Perl 写宏的正确方法

标签 perl

为了简化我的程序,我想写一些我可以在不同的子程序中使用的宏。

这是我写的:

my @m = ();
sub winit   { @m = (); }
sub w       { push @m, shift; }
sub wline   { push @m, ''; }
sub wheader { push @m, commentHeader(shift); }
sub walign  { push @m, alignMakeRule(shift); }
sub wflush  { join($/, @m); }

sub process {
    winit;

    w "some text";
    wline;

    wheader 'Architecture';   
    w getArchitecture();
    wline;

    say wflush;
}

有没有更好或更聪明的方法来做我想做的事?

最佳答案

如果您觉得这种方法有用,您可以使用闭包或闭包哈希,

use strict;
use warnings;
use feature 'say';

sub winit {
  my @m;
  return (
    w       => sub  { push @m, shift; },
    wline   => sub  { push @m, ''; },
    wheader => sub  { push @m, "commentHeader ". shift; },
    walign  => sub  { push @m, "alignMakeRule ". shift; },
    wflush  => sub  { join($/, @m); },
  );
}

sub process {
    my %w = winit();

    $w{w}->("some text");
    $w{wline}->();

    $w{wheader}->('Architecture');   
    $w{w}->("getArchitecture()");
    $w{wline}->();

    say $w{wflush}->();
}

process();

关于Perl 写宏的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27521152/

相关文章:

perl - 获取存储在变量中的文件的最后几行

Perl:读取网络文本文件和 "open"它

perl - 为什么我的 Perl 诅咒窗口不起作用?

mysql - 获取 Template::Plugin::Date 来接受 MySQL 日期和日期时间

perl - 如何让 Frontier::Client/LWP 停止验证 CGI::Application Web 应用程序中的 SSL 证书?

perl getopt::文件的长路径

perl - Perl套接字客户端无法识别消息结尾

Perl Xpath : search item before a date year

linux - 如何将 Linux 上的 perl 脚本的输出转储到文件名为时间戳的日志文件中

regex - 冗长的 Perl 正则表达式