Thread eval is evil: Willkommen auf der dunklen Seite?! (19 answers)
Opened by Ronnie at 2006-11-22 21:21

murphy
 2006-11-23 11:16
#71926 #71926
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
[quote=renee,23.11.2006, 08:24][quote=sid burn,22.11.2006, 22:58][...]
Mit goto wird die aktuelle Funktion durch eine andere ersetzt. Weiterhin wird die Funktion automatisch mit den Parameter von @_ aufgerufen.[/quote]
Was allerdings nichts mit dem goto zu tun hat sondern mit dem Funktionsaufruf mit &
[/quote][/quote]
Das hat sehr wohl etwas mit dem goto zu tun, mit goto bekommt man nämlich einen "tail call", ohne goto nicht. Die folgende Erweiterung Deines Beispiels sollte den Unterschied verdeutlichen:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#!/usr/bin/perl

use strict;
use warnings;

$, = ': ';
$" = ', ';

foo('bar','test');
print "foo returned to top level\n";

fuu('bar','test');
print "fuu returned to top level\n";

sub foo{
print "foo(@_) called by ";
print caller;
print "\n";
&test;
print "test returned to foo\n";
}

sub fuu{
print "fuu(@_) called by ";
print caller;
print "\n";
goto &test;
print "test returned to fuu\n";
}

sub test{
print "test(@_) called by ";
print caller;
print "\n";
}


Ausgabe:
Code: (dl )
1
2
3
4
5
6
7
8
% perl test.pl
foo(bar, test) called by main: test.pl: 9
test(bar, test) called by main: test.pl: 19
test returned to foo
foo returned to top level
fuu(bar, test) called by main: test.pl: 12
test(bar, test) called by main: test.pl: 12
fuu returned to top level
When C++ is your hammer, every problem looks like your thumb.

View full thread eval is evil: Willkommen auf der dunklen Seite?!