in reply to Re: Technique for building arguments from function name?
in thread Technique for building arguments from function name?

Ah, yes, the old AUTOLOAD. You have proven, once again, that you have forgotten more Perl than I have even remembered. What are the downsides of doing this? I was toying with the idea of generating HTML code like this:

add_h1('Title'); add_p('Here is the opening paragraph.')

What is this technique called? There must be a name for it.

$PM = "Perl Monk's";
$MCF = "Most Clueless Friar Abbot Bishop Pontiff Deacon Curate Priest";
$nysus = $PM . ' ' . $MCF;
Click here if you love Perl Monks

Replies are listed 'Best First'.
Re^3: Technique for building arguments from function name?
by shmem (Chancellor) on Dec 04, 2017 at 21:38 UTC
    What is this technique called? There must be a name for it.

    Well, this technique resembles what the ol' CGI.pm was doing in its days. I would say that it is against the DRY principle in software development - Don't Repeat Yourself - so whilst it might have a name, it surely is not a flattering one. Writing

    add_h1('Title'); add_p('Here is the opening paragraph.')

    requires two functions, while writing

    add('h1','Title'); add('p','Here is the opening paragraph.');

    requires only one, which means less code and a smaller memory footprint, at the expense of typing 2 more chars in the source for every call ('' against _). So, having a function for every tag is overkill, as haukex correctly points out.

    There are plenty of ways of generating HTML code in a more flexible way, e.g. Mason (before and after going the Moose way), Template::Toolkit and other templating solutions.

    For more overkill, but with the benefit of writing HTML in a perlish way, see Re: Perl module for RELAX NG? (shameless plug) which converts every tag of a DTD to its function, which takes a block as first argument. I use it only to write templates to be processed by a templating engine, since it is pretty slow. See also Which internal DSL are there in Perl? (Domain Specific Languages - Part 1).

    perl -le'print map{pack c,($-++?1:13)+ord}split//,ESEL'
Re^3: Technique for building arguments from function name?
by LanX (Saint) on Dec 04, 2017 at 20:55 UTC
      You might be interested to look into CGI::HTML::Functions

      Good point! Quoting that doc:

      If you really want to continue using the HTML generation functionality of CGI.pm then you should take a look at HTML::Tiny instead, which may give you a migration path away from CGI.pm's html generation functions; i strongly encourage you to move towards template driven page generation for anything involving markup as it will make porting your app to other frameworks much easier in the long run.

      And CGI::Alternatives mentions, among several others, Template::Toolkit.

        Lee is not a fan of the module he volunteered to maintain.

        On a side note: The monastery's engine heavily relies on those HTML generation functions from CGI.pm!

        Cheers Rolf
        (addicted to the Perl Programming Language and ☆☆☆☆ :)
        Wikisyntax for the Monastery