Thread string found where operator expected (21 answers)
Opened by bianca at 2016-06-06 00:09

Linuxer
 2016-06-08 13:08
#184930 #184930
User since
2006-01-27
3870 Artikel
HausmeisterIn

user image
2016-06-08T07:20:24 Muffi
Code (perl): (dl )
foo($mein_string) # $mein_string kann ich der Sub nicht nach draussen geändert werden


Es mag Haarspalterei sein, aber das ist so nicht ganz korrekt ;-)

Wenn Du innerhalb der Subroutine die Argumente an eigene Variablen übergibst und diese dann bearbeitest, stimmt das.

Code: (dl )
1
2
3
4
5
sub foo {
my $string = shift;

$string =~ s/foo/bar/;
}


Wenn Du aber innerhalb der Subroutine direkt auf die Elemente von @_ zugreifst, änderst Du sehr wohl die originale Variable; denn @_ enthält "Aliase" auf die eigentlichen Argumente/Variablen.

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#! /usr/bin/perl
use strict;
use warnings;

use 5.010;

sub foo {
        $_[0] =~ s/Echo/Otto/;
}


my $text = "Hallo Echo";

foo($text);

# schau nach, was nun in $text steckt
say $text;


Nachtrag:
Werden fixe Strings übergeben, gibt es Fehlermeldungen, wenn man dann versucht, eine Änderung am Alias vorzunehmen:

Code: (dl )
1
2
3
4
foo( "Hallo Welt" );

# ergibt dann
# Modification of a read-only value attempted at t.pl line 8.


Nachtrag2:
Wer die Doku dazu sucht: Perldoc:perlsub, 3. Absatz in der Description
Last edited: 2016-06-08 13:18:24 +0200 (CEST)
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!

View full thread string found where operator expected