Spyder
Spyder

Reputation: 39

Perl and Python difference in predeclaring functions

Perl

 test();

 sub test {
   print 'here';
 }

Output

here

Python

test()

def test():
   print('here')
   return

Output

Traceback (most recent call last):
  File "pythontest", line 2, in <module>
    test()
NameError: name 'test' is not defined

I understand that in Python we need to define functions before calling them and hence the above code doesn't work for Python.

I thought it was same with Perl but it works!

Could someone explain why is it working in the case of Perl?

Upvotes: 2

Views: 200

Answers (1)

amon
amon

Reputation: 57640

Perl uses a multi-phase compilation model. Subroutines are defined in an early phase before the actual run time, so no forward declarations are necessary.

In contrast, Python executes function definitions at runtime. The variable which holds a function must be assigned (implicitly by the def) before it can be called as a function.

If we translate these runtime semantics back to Perl, the code would look like:

# at runtime:
$test->();

my $test = \&test;

# at compile time:
sub test { print 'here' }

Note that the $test variable is accessed before it was declared and assigned.

Upvotes: 7

Related Questions