Schrift
[thread]5755[/thread]

lokale Variable aus Sub ins Hauptprogramm! (Seite 3)



<< |< 1 2 3 4 >| >> 31 Einträge, 4 Seiten
Strat
 2005-11-22 17:12
#55918 #55918
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
packagevariablen sind immer in allen namensraeumen sichtbar, wenn man sie voll qualifiziert ausschreibt, z.B. $main::var.

our bzw. use vars ist eine hilfe, packagevariablen im aktuellen und untergeordneten scopes kuerzer schreiben zu koennen. wenn man in J-Jazz-Z's Beispiel das package foo in eine eigene Datei auslagert und die dann mit use foo; laedt, dann isses aus mit $var... dann bleibt nur noch $main::var (oder als kurzschreibung: $::var)

our gibt's seit perl5.6... und ich bevorzuge immer noch das use vars...\n\n

<!--EDIT|Strat|1132672424-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
J-jayz-Z
 2005-11-22 17:14
#55919 #55919
User since
2005-04-13
625 Artikel
BenutzerIn
[Homepage] [default_avatar]
Jo. In dem Fall dann Exporter
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="5065726c2d436f6d6d756e697479"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'

http://perl-tutor.de
pq
 2005-11-22 17:19
#55920 #55920
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=Crian,22.11.2005, 16:05]use vars ist eigentlich inzwischen durch our ersetzt worden ...[/quote]
naja, nicht ersetzt... es macht etwas anderes...
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
pq
 2005-11-22 17:19
#55921 #55921
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=J-jayz-Z,22.11.2005, 16:11]our gibt es aber dich erst seit *überleg* 5.8.* ?![/quote]
seit perl 5.6
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
J-jayz-Z
 2005-11-22 17:20
#55922 #55922
User since
2005-04-13
625 Artikel
BenutzerIn
[Homepage] [default_avatar]
okay, danke
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="5065726c2d436f6d6d756e697479"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'

http://perl-tutor.de
Strat
 2005-11-22 17:40
#55923 #55923
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=J-jayz-Z,22.11.2005, 16:14]Jo. In dem Fall dann Exporter[/quote]
Namensraumverschmutzung? *schuettel*
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
pq
 2005-11-22 17:51
#55924 #55924
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=Strat,22.11.2005, 16:40][quote=J-jayz-Z,22.11.2005, 16:14]Jo. In dem Fall dann Exporter[/quote]
Namensraumverschmutzung? *schuettel*[/quote]
also use MyConf '$Conf'; würde ich nun wirklich nicht als namensraumverschmutzung bezeichnen.
man sollte nur nicht @EXPORT verwenden, sondern möglichst @EXPORT_OK.
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
Strat
 2005-11-22 18:45
#55925 #55925
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
@pq: da stimme ich dir zu. EXPORT_OK finde ich nicht uebel, weil man das naemlich gottseidank benutzen kann, aber nicht muss...

Aber auch @EXPORT kann man gottseidank durch use ModulName (); verhindern... irgendwie lade ich Module fast nur noch so... dann sieht man bei groesseren Anwendungen mit kiloweise verwendeten Modulen schneller, von wo was kommt...
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
root
 2005-11-22 21:34
#55926 #55926
User since
2003-08-15
120 Artikel
BenutzerIn
[default_avatar]
also sorry jungs aber das hilft mir für externe dateien nicht weiter!

1. datei:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/usr/bin/perl -w
#package MyConf;
use strict;
use warnings;
use vars '%template';
#use base 'Exporter';
#@EXPORT_OK = qw(%template);
require "rootssubs.sub";

my %template = ("site" => "home");
my $template_ref = \%template;

print "Content-type: text/html\n\n";

&test($template_ref);
print "in main: ".$template{'site'}."<br>\n";
exit(0);


Code: (dl )
1
2
3
4
5
6
7
8
use vars '%template';
sub test{
my $in = shift;
print "Bin in test:".$$in{'site'}."<br>\n";
print "Bin in test:".$template{'site'}."<br>\n";
$$in{'site'} = "news";
}
1;


output:
Code: (dl )
1
2
3
Bin in test:home
Bin in test:
in main: news


Ihr fachsimpelt hier welche Lösung die schönste ist und bei mir funktioniert keine einzige...

kann bitte mal einer ein beispiel mit zwei dateien und einem globalen Hash machen?!

Danke!!! Ich bin nämlich am verzweifeln!
pq
 2005-11-22 22:26
#55927 #55927
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=pq,20.11.2005, 19:05]globale variablen sind nicht generell schlecht, aber man sollte sie vermeiden.
ich mache gerne sowas:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
package MyConf;
use strict;
use warnings;
use vars qw($Conf @EXPORT_OK);
use base 'Exporter';
@EXPORT_OK = qw($Conf);

# erstelle $Conf
...

#script:
use MyConf '$Conf';
# mach was mit $Conf
[/quote]
ich schrieb ja schon ein beispiel.
den code mit "package MyConf" musst du in eine datei MyConf.pm packen.
und vielleicht mal perldoc perlmod lesen.
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
<< |< 1 2 3 4 >| >> 31 Einträge, 4 Seiten



View all threads created 2003-09-24 21:07.