This and other RFCs are available on the web at
  http://dev.perl.org/rfc/

=head1 TITLE

Allow Calling Any Function With A Syntax Like s///

=head1 VERSION

  Maintainer: John Porter <[EMAIL PROTECTED]>
  Date: 17 Aug 2000
  Version: 1
  Mailing List: [EMAIL PROTECTED]
  Number: 139

=head1 ABSTRACT

The calling syntaces of m()/s() should be consistent with other forms of
function call; this should be achieved not by eliminating the traditional
C<//> form from m()/s(), but by allowing any function to be called with C<//>.

=head1 DESCRIPTION

The strings delimited by the slashes, or other allowed delimiters, would be
passed as the arguments to the function.  Note that this would include a 
possible trailing string of C<\w> characters.

Furthermore, if the binding operator is used in conjunction with the function
call, it is passed as the first argument by reference, appropriately arranged.

Some simple example should help to demonstrate the idea:

        greek( 'alpha', 'beta' );

could be written as any of the following:

        greek/alpha/beta/;

        greek#alpha#beta#;

        greek(alpha){beta};

And, taking advantage of the trailing C<\w> string:

        greek/alpha/beta;

        greek#alpha#beta;

        greek(alpha)beta;

Now, the following in the new syntax

        $foo =~ greek/alpha/beta;

would be the same as the following in old syntax:

        greek( \$foo, 'alpha', 'beta' );

=head1 IMPLEMENTATION

The mechanism that is currently invoked in the parsing of m()/s() expressions
could be used generally.

Note that all the parameters are necessarily strings; numeric literals
do not get pre-converted by the compiler.  Or rather, whatever perl does
for m()/s() arguments, that would also be done when this syntax is used
to call other functions.

head2 Further Observations

The proposed semantics of the binding operator C<=~> looks to my eye very much
like a method referencing operator for direct (non-blessed) variable objects.

That is, there is no reason to suppose that

        for ( %db =~ grok/SSN/$ssn/g ) ) { ...

is not an invocation of the C<grok> "method" on the C<%db> "object".

=head1 REFERENCES

L<perlop> for details on the calling syntax of m//, s///.

Reply via email to