Perl has a large number of builtin built-in functions, ; they are described on the perlfunc
manpage [Wall 2011]. Perl also has a handful of reserved keywords such as while
; they are described on the perlsyn
manpage [Wall 2011].
Do not use an identifier for a subroutine that has been reserved for a builtin built-in function or keyword.
Noncompliant Code Example
This noncompliant code example codes a subroutine called open()
, which clashes with the open()
builtin built-in function.
Code Block | ||||
---|---|---|---|---|
| ||||
sub open {
my ($arg1, $arg2, $arg3) = @_;
print "arg1 = $arg1\n";
print "arg2 = $arg2\n";
print "arg3 = $arg3\n";
}
open( FOO, "<", "foo.txt"); # What does this do?
|
Perl (v5.12.1) actually invokes the builtin built-in open()
rather than the newly crafted subroutine.
...
This compliant solution uses a different name for its subroutine; consequently, it behaves as expected.
Code Block | ||||
---|---|---|---|---|
| ||||
sub my_open {
my ($arg1, $arg2, $arg3) = @_;
print "arg1 = $arg1\n";
print "arg2 = $arg2\n";
print "arg3 = $arg3\n";
}
my_open( FOO, "<", "foo.txt");
|
...
DCL31-EX0: This rule does not apply to object methods. Object methods are easy for the parser to distinguish from builtin built-in functions or keywords due to their distinct syntax.
...