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

Regex + eval()



<< >> 3 Einträge, 1 Seite
mashon
 2005-06-18 13:54
#55536 #55536
User since
2005-01-26
2 Artikel
BenutzerIn
[default_avatar]
Hallo

Ich möchte einen Regex-Editor schreiben und daher brauche ich die Funktion eval(), die mir den von mir zusammengesetzten Regex in der Variable $com ausführt.
Wieso funktioniert jedoch folgender Code nicht:



Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
#!/usr/bin/perl -w

$text = "josdifj34joji";
$regex = '(\d+)';
$opt = "g";

$com = '$text =~ m/'."$regex".'/'."$opt;";

eval $com;

print "\$1: $1\n";


Vielen Dank für eure Antworten,
mashon
Ishka
 2005-06-18 16:30
#55537 #55537
User since
2003-08-04
771 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Weil der Wert von $1 nicht über die Grenze von eval erhalten bleibt:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
use strict;
use warnings;

my $text = "josdifj34joji";
my $regex = '(\d+)';
my $opt = "g";

my $erg=undef;
my $com = '$text =~ m/'."$regex".'/'."$opt;\$erg=\$1";

eval $com;

print "\$1: $erg\n";


ps:
use strict; und use warnings verwenden, ich habs mal eingebaut.

my $com = '$text =~ m/'."$regex".'/'."$opt;\$erg=\$1";

könnte man auch als

my $com = "\$text =~ m/$regex/$opt;\$erg=\$1";

schreiben.
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}
pfuschi
 2005-06-18 16:58
#55538 #55538
User since
2004-03-31
198 Artikel
BenutzerIn
[default_avatar]
Servus,
ich hab sowas schon gemacht und hatte wohl die gleichen Probleme wie du *G*
Unter http://board.perl-community.de/cgi-bin....6&t=944
Hab ich auch beschrieben wie ich diese Problem gelöst habe... evtl. hilft dir das weiter.

Wenn du Fragen hast dann immer her damit!

greetz & fetten Segen
manu
PCE - Editor für Perl in Perl
Bookzilla.de - Mit jedem Kauf OpenSource unterstützen
"I know I can't hold the hate inside my mind
cause what consumes your thoughts controls your life"
- Creed
<< >> 3 Einträge, 1 Seite



View all threads created 2005-06-18 13:54.