Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]7264[/thread]

includes: globale settings include

Leser: 1


<< |< 1 2 >| >> 19 Einträge, 2 Seiten
Snubnose
 2005-09-09 12:47
#57782 #57782
User since
2005-08-08
8 Artikel
BenutzerIn
[default_avatar]
Hallo allerseits...
Ich hab seit langem ein Problem, dass ich nicht weiss wie ich "globale variablen" über ein include in ein Perl-Script ziehen kann.
Zu deutsch: ich würde gerne ein File haben
data.inc
Code: (dl )
1
2
my $variable1 = xyz;
my $variable2 = zxy;

und dann im script.pl
Code: (dl )
1
2
include "data.inc";
print $variable1;

Ich könnte mir auch denken dass das in Perl gar nicht geht wegen den Sicherheits Policies, was für ne Alternative habe ich ?
Danke schonmal....
renee
 2005-09-09 13:10
#57783 #57783
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Du kannst es in Modulen mit CPAN:Exporter machen...

Modul data.pm:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package data;

use strict;
use warnings;

require Exporter;

our @ISA = qw(Exporter);

our @EXPORT = ();
our @EXPORT_OK = qw($variable1 $variable2);
our %EXPORT_TAGS = (all => [@EXPORT_OK]);

our $variable1 = 'Test';
our $variable2 = 'Hallo';


Skript:
Code: (dl )
1
2
3
4
5
6
7
8
#!/usr/bin/perl

use strict;
use warnings;
use lib qw(.);
use data qw(:all);

print $variable2," ",$variable1,"\n";
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/
J-jayz-Z
 2005-09-09 14:14
#57784 #57784
User since
2005-04-13
625 Artikel
BenutzerIn
[Homepage] [default_avatar]
Vielleicht nicht ganz das, was du wolltest, aber ein Anfang:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/usr/bin/perl
use strict;
use warnings;

my %names = &getvariables();

print $names{'$variable1'} . "\n";

sub getvariables($) {
my $datei = shift || "data.inc";
open(DATEI, "<$datei") || die "Fehler beim öffnen von $datei: $!";
my @inhalt = <DATEI>;
close(DATEI);
my %names;
for(@inhalt) {
my ($name, $value) = split(/\s*?\=\s*?/, $_);
$names{$name} = substr($value, 1, length($value)-3);

}
return %names;
}

Ausgabe: xyz

EDIT: Codereste vergessen zu entfernen ^^\n\n

<!--EDIT|J-jayz-Z|1126261241-->
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
renee
 2005-09-09 14:17
#57785 #57785
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
@J-jay-Z: Dann hast Du aber ein Problem wenn in der Datei sowas steht wie my ($test,$test2) = (1,3);

Ausserdem kann man mit den EXPORT-Sachen sehr gut bestimmen, wie sehr man seinen Namensraum "verschmutzt"...
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/
J-jayz-Z
 2005-09-09 14:31
#57786 #57786
User since
2005-04-13
625 Artikel
BenutzerIn
[Homepage] [default_avatar]
[quote=renee,09.09.2005, 12:17]@J-jay-Z: Dann hast Du aber ein Problem wenn in der Datei sowas steht wie my ($test,$test2) = (1,3);[/quote]
stimmt. Aber wie gesagt, es ist nur ein Anfang ;)
Wenn wirklich nur immer $name = 'wert'; drinsteht, sollte es aber so gehen
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-09-09 14:50
#57787 #57787
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=renee,09.09.2005, 11:10]
Code: (dl )
1
2
3
require Exporter;

our @ISA = qw(Exporter);
[/quote]
gibt es eigentlich einen grund, wieso noch so viele leute nicht use base qw(Exporter); schreiben?
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
renee
 2005-09-09 15:00
#57788 #57788
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
h2xs ;)
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/
docsnyder
 2005-09-09 15:25
#57789 #57789
User since
2005-09-08
300 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hi!

... warum nicht einfach so:

Code: (dl )
1
2
3
4
do("data.inc");

print("var 1: $variable1");
print("var 2: $variable2");


Gruß, Doc
Gast Gast
 2005-09-09 16:12
#57790 #57790
"data" wär allerdings ein Pragma ;)
Snubnose
 2005-09-09 17:01
#57791 #57791
User since
2005-08-08
8 Artikel
BenutzerIn
[default_avatar]
hmmm also das mit dem
do() sieht elegeant aus, geht bei mir aber nicht. Ich find auch nichts bei CPAN oder google drüber, das Wort 'do' ist einfach zu oft im Gebrauch. Was macht do() ?
Ansonsten werd ich den exporter verwenden - das müsste ja gehen.
<< |< 1 2 >| >> 19 Einträge, 2 Seiten



View all threads created 2005-09-09 12:47.