Schrift
[thread]5755[/thread]

lokale Variable aus Sub ins Hauptprogramm! (Seite 2)



<< |< 1 2 3 4 >| >> 31 Einträge, 4 Seiten
skontox
 2003-09-24 23:42
#55908 #55908
User since
2003-08-06
193 Artikel
BenutzerIn
[default_avatar]
Ishka gib mir doch auch mal bitte ein Beispiel!

Gruß skontox
Ishka
 2003-09-25 00:13
#55909 #55909
User since
2003-08-04
771 Artikel
HausmeisterIn
[Homepage] [default_avatar]
[quote=Ishka,24.09.2003, 21:15]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
blubb(blah(),'zwei');

sub blah
{
my %h=(eins=>1,zwei=>2,drei=>3);
return \%h;
}

sub blubb
{
print $_[0]->{$_[1]}
}
[/quote]
;)
sub z{if(@_){1while$x[$k=rand 10];t($t=$x[$k]=1)}print map"$z[$x[$_]]$_".($_%3?
"":"\n"),1..9}sub t{$j=0;$x[$_+1]==$t&&($j+=2**$_)for 0..8;z,die"Gewinner $z[$t]
"if grep$_==($j&$_),7,56,73,84,146,273,292,448;z,die"Gleichstand\n"if@x>9&&!grep
!$_,@x}@x=4;@z=qw{. [ (};z$^T&1;while(<>){next if$_>9||$x[$_];t$t=$x[$_]=2;z 1}
skontox
 2003-09-25 00:44
#55910 #55910
User since
2003-08-06
193 Artikel
BenutzerIn
[default_avatar]
Yupp! Vielen Danke Ishka!

Gruß skontox
root
 2005-11-20 19:54
#55911 #55911
User since
2003-08-15
120 Artikel
BenutzerIn
[default_avatar]
Es soll ja keine behaupten ich würde nicht erst suchen :-)

Guten Abend alle zusammen!

Ich mag globale Variablen! Ich habe gerne globale Hashes wie %config und %user und %eingang. Nun arbeite ich natürlich mit strict und es ist auch alles gut! Nun warbeite ich aber auch gerne mit ausgelagerten Dateien und hole mir meine subs mit require "rootssubs.sub"; rein. Nun kann ich in allen subs aus meiner rootsprogramm.pl benutzen, aber in subs aus rootssubs.sub nicht.
Wie kann ich das umgehen?

Ich habe halt immer die benötigten Daten übergeben und wieder zurück gegeben. Ist aber nicht immer so schön.
Oder mir zB die %config in der rootssubs.sub erneut angelegt. Das finde ich aber ekelig!

Kann ich entweder die rootssubs.sub anders einbinden oder in der rootssub.sub an die globalen Variablen ran kommen oder vielleicht eine Referenz auf %wasauchimmer übergeben, so dass ich die daten darin global ändern kann ohne sie wieder zurück zu geben?

Danke für eure Antworten!
pq
 2005-11-20 20:05
#55912 #55912
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
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
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
root
 2005-11-20 20:38
#55913 #55913
User since
2003-08-15
120 Artikel
BenutzerIn
[default_avatar]
Verstehe ich noch nicht ganz!
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# Hauptprogramm
#!/usr/bin/perl -w
#package MyConf;
use strict;
use warnings;
use vars qw(%template @EXPORT_OK);
use base 'Exporter';
@EXPORT_OK = qw(%template);
require "rootssubs.sub";

my %template = ("site" => "home");

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

&test;
exit(0);


Code: (dl )
1
2
3
4
5
6
# rootssubs.sub
#use MyConf '%template';
sub test{
print "Bin in test:".$template{'site'}."<br>\n";
}
1;


output: Bin in test:

Variable kommt nicht an, strict meckert aber auch nicht.
Die package Nummer hab ich auskommentiert, weil es damit gar nicht läuft. Kann du das bitte mal näher erläutern? Was machen die Zeilen so?
root
 2005-11-20 20:45
#55914 #55914
User since
2003-08-15
120 Artikel
BenutzerIn
[default_avatar]
Jetzt habe ich mir sowas gebaut, das ist auch sehr nett, aber ich muss nach wie vor dem sub erstmal etwas geben. Schön ist aber dass ich an die Variable dann ran komme und etwas im Hauptprogramm ändern kann ohne es mit return zurück zu geben.
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 qw(%template @EXPORT_OK);
#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
#use MyConf '%template';
sub test{
my $in = shift;
print "Bin in test:".$$in{'site'}."<br>\n";
$$in{'site'} = "news";
}
1;


Könnte ich der ganzen unterdatei irgendwie die Referenz geben? :-)
J-jayz-Z
 2005-11-22 16:43
#55915 #55915
User since
2005-04-13
625 Artikel
BenutzerIn
[Homepage] [default_avatar]
Mich wundert, das use vars erst bei pq angesprochen wurde ...
Mit use vars '$var' kannst du eine Variable komplett sichtbart machen. Also in allen Namensräumen.
kleines Beispiel:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/usr/bin/perl
use strict;
use warnings;

use vars '$var';

package main;

my $var = "Welt";
print "Namensraum: main\n";
print "Hallo " . $var . "\n";

package foo;
print "Namesraum: foo\n";
print "Hallo " . $var . "\n";

$var = "du";

print "Hallo " . $var . "\n";
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
Crian
 2005-11-22 17:05
#55916 #55916
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
use vars ist eigentlich inzwischen durch our ersetzt worden ...
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
J-jayz-Z
 2005-11-22 17:11
#55917 #55917
User since
2005-04-13
625 Artikel
BenutzerIn
[Homepage] [default_avatar]
our gibt es aber dich erst seit *überleg* 5.8.* ?! Weißt du, auf was für einem System die scripte immer laufen müssen und was für ein Perl installiert ist? Also bei sowas geh ich lieber auf Nummer sicher ...
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
<< |< 1 2 3 4 >| >> 31 Einträge, 4 Seiten



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