datastarstar
asked on
Why is my $1 variable empty after successful match in Perl?
This should be a no-brainer, but clearly I'm missing something obvious. Why doesn't this work? I'm just trying to get the contents of the matched portion of a string. It should be $1 right? Obviously, this is a very simple test -- my bigger application is much more complicated, so please tell me what I'm doing wrong.
Perl script:
my $var1 = "Hello";
print "original string: $var1";
if ($var1 =~ /Hello/ ) {print "<br>found";}
print "<br>matched string: $1";
Output:
original string: Hello
found
matched string:
Perl script:
my $var1 = "Hello";
print "original string: $var1";
if ($var1 =~ /Hello/ ) {print "<br>found";}
print "<br>matched string: $1";
Output:
original string: Hello
found
matched string:
SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Is the entire file just one line?
Ouch. Given that small amount of info, it appears to me that you are using an awkward if not ugly approach to storing and retrieving your hash. The Storable module or one of the config modules would be a better method.
Unless your file only has one line, you'll need to adjust how you're reading it into the scalar, which as written only reads in 1 line.
Unless your file only has one line, you'll need to adjust how you're reading it into the scalar, which as written only reads in 1 line.
ASKER
This line might be important for you to see:
undef $/;
my $filecontents=<INFILE>;
...
The file is actually very large -- hundreds of lines of hash defs. If there's a better way to create a hash from a file, I'd love to hear it.
Thanks!
undef $/;
my $filecontents=<INFILE>;
...
The file is actually very large -- hundreds of lines of hash defs. If there's a better way to create a hash from a file, I'd love to hear it.
Thanks!
SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Thanks to you both. I'm using Ozo's fix initially but plan to adopt FishMonger's suggestion moving forward. Since FM answered the original question, I did a 2/3 - 1/3 split of the points. Hope that's fair.
Thanks again!
Thanks again!
ASKER
my $filecontents=<INFILE>; # the file contains a text representation of a hash definition
close FILE;
$filecontents =~ /(.*)/ )
print $1;
my %myHash = (eval($1));