Thread END Block innerhalb einer Subroutine (11 answers)
Opened by Kuerbis at 2013-05-09 18:04

clms
 2013-05-10 10:22
#167485 #167485
User since
2010-08-29
373 Artikel
BenutzerIn
[default_avatar]
2013-05-10T07:15:18 Kuerbis
In der Subroutine könnte ich auf Variablen zugreifen, die außerhalb nicht sichtbar sind:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
use constant = {
...
}

sub routine {
    my $mouse_mode = set_mouse_mode;
    ...
    ...
    END {
        if ( $mouse_mode ) {
            print UNSET_EXT_MODE_MOUSE_1005     if $mouse_mode == 3;
            print UNSET_SGR_EXT_MODE_MOUSE_1006 if $mouse_mode == 4;
            print UNSET_ANY_EVENT_MOUSE_1003;
        }
    }
}

Dann bekommst Du aber folgende Warnung:
Variable "$mouse_mode" will not stay shared at ... line 10.

Und die Quizfrage:
Welchen Wert hat $mouse_mode im END-Block wenn routine() zweimal aufgerufen wird und $mouse_mode beim ersten Aufruf 3 und beim zweiten Aufruf 4 zugewiesen wird?

Sinnvoller erscheint mir folgender Code:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
my $mouse_mode;

sub routine {
  $mouse_mode = set_mouse_mode;
  ...
}

END {
  if ($mouse_mode) { 
    ...
  }
}

View full thread END Block innerhalb einer Subroutine