Schrift
[thread]5972[/thread]

Require & Return

Leser: 4


<< |< 1 2 >| >> 12 Einträge, 2 Seiten
BrownWolf
 2003-12-16 01:41
#76248 #76248
User since
2003-08-15
308 Artikel
BenutzerIn
[default_avatar]
Hi,

vielleicht liegts daran das ich mich kaum noch mit Perl beschäftige aber ich habe nen kleines Problem :)

Also ich habe zb eine "config.dat" in der folgendes steht:

Quote
return {
config => {
bla => 1,
blub => 2
},
};


Diese möchte ich jetzt mit require in ein Perlscript einbinden und dann auf das return {} zugreifen.

Wie mache ich das ? Bin da grad überfragt.
Code (perl): ()
1
2
3
sub _{s;;xrqIpiql\\{}p{pl{R>rl{N{}gjwpkssq]>rl{N;;;*{{}=*{_};;
&#36{{}={q{{{}}}=>[reverse+split+reverse+q;}{;]};&#36{{}->{q{{{}}}}->[@{{}];}
&#36{{}=reverse+_(q{{}}=>q{{}})^chr(30)x+length&_(q{{}}=>,q{{}})and+print;
esskar
 2003-12-16 01:54
#76249 #76249
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=BrownWolf,16.12.2003, 00:41]Hi,

vielleicht liegts daran das ich mich kaum noch mit Perl beschäftige aber ich habe nen kleines Problem :)

Also ich habe zb eine "config.dat" in der folgendes steht:

Quote
return {
  config => {
                bla => 1,
                blub => 2
                },
};


Diese möchte ich jetzt mit require in ein Perlscript einbinden und dann auf das return {} zugreifen.

Wie mache ich das ? Bin da grad überfragt.[/quote]
Code: (dl )
1
2
3
4
5
6
7
our retval = ( config => {
bla => 1,
blub => 2
},
);

1;
Strat
 2003-12-16 02:03
#76250 #76250
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
so gar nicht; du kannst aus dem hauptprogramm nichts mit return zurueckgeben.
Entweder du packst es in eine subroutine, oder du weist es einer globalen Variablen zu, dann kannst du mit require arbeiten; sonst musst du einen anderen weg gehen:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
my $configFile = "config.dat";

my $config;

unless (open (FH, $configFile)) {
die "Error: can't open '$configFile': $!\n";
}
else {
local $/;
my $code = <FH>;
close (FH);

$code =~ s/^return\s*=>/\$config = /;
eval "$code";
die $@ if $@;
}

hab's nicht getestet, aber vielleicht funktionierts...
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
BrownWolf
 2003-12-16 02:05
#76251 #76251
User since
2003-08-15
308 Artikel
BenutzerIn
[default_avatar]
Thx ! Sowas hatte ich gesucht Strat.
Code (perl): ()
1
2
3
sub _{s;;xrqIpiql\\{}p{pl{R>rl{N{}gjwpkssq]>rl{N;;;*{{}=*{_};;
&#36{{}={q{{{}}}=>[reverse+split+reverse+q;}{;]};&#36{{}->{q{{{}}}}->[@{{}];}
&#36{{}=reverse+_(q{{}}=>q{{}})^chr(30)x+length&_(q{{}}=>,q{{}})and+print;
ptk
 2003-12-16 11:40
#76252 #76252
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
[quote=Strat,16.Dec..2003, 01:03]so gar nicht; du kannst aus dem hauptprogramm nichts mit return zurueckgeben.
[/quote]
Klar geht das. Der Inhalt von /tmp/bla.pl:
Code: (dl )
1
2
3
return {
x => 1,
};

Der Inhalt von /tmp/foo.pl:
Code: (dl )
1
2
$y = require "/tmp/bla.pl";
use Data::Dumper; warn Dumper($y);

Die Ausgabe:
Code: (dl )
1
2
3
4
perl /tmp/foo.pl
$VAR1 = {
"x" => 1
};
Strat
 2003-12-16 16:40
#76253 #76253
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
dann versuche mal bei require return 0; zurueckzugeben...

nur weil es teilweise funktioniert, heisst es nicht, dass es immer funktioniert...

hoechstens mit do wuerde es funktionieren\n\n

<!--EDIT|Strat|1071585767-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
ptk
 2003-12-16 16:56
#76254 #76254
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Solange du nicht FALSE zurueckgibst, geht es schon.
Strat
 2003-12-16 17:53
#76255 #76255
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
config.dat
Code: (dl )
return 0;

hauptprogramm:
Code: (dl )
1
2
3
4
5
6
7
E:\tmp\test\require>perl
use warnings;
use strict;
my $result = require('config.dat');
print $result;
^D
config.dat did not return a true value at - line 3.
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Strat
 2003-12-16 17:54
#76256 #76256
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
config.dat
Code: (dl )
1
2
3
return 0;

1;


Code: (dl )
1
2
3
4
5
6
7
8
9
E:\tmp\test\require>perl
use warnings;
use strict;
my $result = require('config.dat');
print $result;
^D
config.dat did not return a true value at - line 3.

E:\tmp\test\require>
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
BrownWolf
 2003-12-16 18:03
#76257 #76257
User since
2003-08-15
308 Artikel
BenutzerIn
[default_avatar]
Hätt noch ne kleine Frage zu diesem Teil vom Code:

Quote
local $/;
my $code = <FH>;
close (FH);


Ich schreib da eigentlich immer:

Quote
my $code = join '', <FH>;
close(FH);


Ist das egal ?
Code (perl): ()
1
2
3
sub _{s;;xrqIpiql\\{}p{pl{R>rl{N{}gjwpkssq]>rl{N;;;*{{}=*{_};;
&#36{{}={q{{{}}}=>[reverse+split+reverse+q;}{;]};&#36{{}->{q{{{}}}}->[@{{}];}
&#36{{}=reverse+_(q{{}}=>q{{}})^chr(30)x+length&_(q{{}}=>,q{{}})and+print;
<< |< 1 2 >| >> 12 Einträge, 2 Seiten



View all threads created 2003-12-16 01:41.