Schrift
[thread]7915[/thread]

Subroutinen und listen als Parameter. (Seite 2)



<< |< 1 2 >| >> 17 Einträge, 2 Seiten
Matze
 2006-04-23 16:37
#65214 #65214
User since
2005-08-29
222 Artikel
BenutzerIn
[Homepage] [default_avatar]
Konnte leider keine andere Lösung zu 'use strict' und Typeglobs
finden, aber mit 'no strict' gehts ja auch.

@Dubu: Da hst du natürlich Recht, aber falls er sich wirklich
noch nicht mit Refeerenzen beschäftigt hat, dann sind Typeglobs
sicher einfacher.
Mit Referenzen sollte er sich trotzdem nebenbei befassen, aber
bis dahin, kann er ja ruhig Typeglobs benutzen.

MfG. Matze
Mit freundlichen Grüßen: Matze
Dubu
 2006-04-23 17:11
#65215 #65215
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Naja, ich halte Typeglobs eher für eine Krücke, die noch aus den Zeiten übrig geblieben ist, als es noch keine echten Referezen gab. Ich finde auch nicht, dass sie einfacher sind als Referenzen. Und die Verwendung von 'no strict' hier macht es nicht gerade besser ...

Wie sieht es eigentlich in Perl6 mit Typeglobs aus?

Edit: perlsub sieht es übrigens auch so:
[quote=perlsub,Passing Symbol Table Entries]
Passing Symbol Table Entries (typeglobs)

WARNING: The mechanism described in this section was originally the only way to simulate pass-by-reference in older versions of Perl. While it still works fine in modern versions, the new reference mechanism is generally easier to work with. See below.
[/quote]\n\n

<!--EDIT|Dubu|1145797956-->
pq
 2006-04-23 17:34
#65216 #65216
User since
2003-08-04
12209 Artikel
Admin1
[Homepage]
user image
[quote=Matze,23.04.2006, 11:46]Entschuldige, mir my() funktioniert es ja nicht, aber mit local:
[code mit local, typeglobs und ohne strict...]
Das funktioniert!

Allerdings weiß ich nicht mehr, wie man 'use strict' miteinbinden
kann damit es auch dann noch funktioniert. :(
Ich werde mich aber nochmal erkundigen.[/quote]
was genau ist jetzt das problem an dem code hier:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/usr/bin/perl
use warnings;
use strict;

my $a = "abc";
my $b = "123";
my @a = qw(a b c);
my @b = qw(1 2 3);

subroutine($a,\@a,$b,\@b);

sub subroutine {
  my ($sa,$aa,$sb,$ab) = (@_);

  print "$sa\n$sb\n";
  print "@$aa\n@$ab\n";
}
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Matze
 2006-04-23 17:53
#65217 #65217
User since
2005-08-29
222 Artikel
BenutzerIn
[Homepage] [default_avatar]
[quote=Matze,23.04.2006, 14:37]...
falls er sich wirklich noch nicht mit Referenzen beschäftigt
hat, dann sind Typeglobs sicher einfacher.
Mit Referenzen sollte er sich trotzdem nebenbei befassen, aber
bis dahin, kann er ja ruhig Typeglobs benutzen.[/quote]
Wenn er nicht nur den Wert der Variablen ausgeben möchte,
sondern z.B. auch einzelne Elemente verändern, löschen, etc.
möchte, sich aber noch nicht mit Referenzen und deren Syntax
auseinander gesetzt hat, dann sind Typeglobs bestimmt
einfacher für ihn.
Der Anfang ist ein bisschen kompliziert, aber das ist nur eine
Zeile Code(mit 'no strict' 2), und danach kann er seine Arrays
oder was auch immer wie normale Arrays benutzne, ansprechen.

MfG. Matze
Mit freundlichen Grüßen: Matze
Strat
 2006-04-23 18:12
#65218 #65218
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
auch ich rate von der verwendung von typeglobs ab. und dazu kommt noch das local... sehr antik und kann code voellig unleserlich machen. Referenzen sind in meinen Augen leichter zu verstehen, und man kann mit ihnen sauber mit my-variablen arbeiten, waehrend globs immer das problem haben, dass sie auf packagevariablen zeigen (bzw sie mit local verdecken).

warum was nicht gleich vernuenftig machen, auch wenn es ein-zwei tage mehr zeit kostet? diese zeit holt man spaeter haeufig zig-fach wieder zurueck (z.B. weniger fehlersuchen, bessere wartbar-/erweiterbarkeit, ...). Und use strict abzuschalten laesst tippfehlern freien lauf, und die sind manchmal echt schwierig zu finden...\n\n

<!--EDIT|Strat|1145801713-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
renee
 2006-04-23 18:53
#65219 #65219
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ich verwende local z.B. immer wenn ich $/ verwende. Das erspart häufig eine endlos lange Fehlersuche...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Strat
 2006-04-23 19:06
#65220 #65220
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
bei eingebauten package-variablen, die mit my natuerlich nicht zusammenarbeiten, bleibt auch leider meist nur local (aber dann ist es fast immer noetig). dagegen habe ich auch nichts (auch wenn ich es nicht schoen finde).

allerdings sind mit local "schoene" sachen moeglich, z.B.
Code: (dl )
1
2
3
4
5
6
7
8
9
10
use vars qw(@MyArray);
@MyArray = 1..10;
print "Before: @MyArray\n";
&Dizzy();
print "After: @MyArray\n";

sub Dizzy {
local @MyArray[4..6];
@MyArray = map { $_ * 2 } @MyArray;
}

aber sowas sollte man sich eher fuer obfu's vorbehalten...
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
<< |< 1 2 >| >> 17 Einträge, 2 Seiten



View all threads created 2006-04-22 13:39.