Skip to main content









I was using my $tmp = glob("file20240101.*") to find the full filename regardless of the extension(I knew there was only one of each file), when I found glob was alternating between working and failing

Rendering it as my ($tmp) = glob("file20240101.*") fixed the problem, but I'm wondering why, If it was going to go wrong I'd have thought treating glob's list in a scalar context would return the number of elements in the list

#!/usr/bin/perl
use warnings;
use strict;

for (1..4) {
my $tmp = glob($0);
print "$_ $tmp\n";
}
print "###\n";
for (1..4) {
my ($tmp) = glob($0);
print "$_ $tmp\n";
}

Output:
1 glob.pl
Use of uninitialized value $tmp in concatenation (.) or string at glob.pl line 7.
2
3 glob.pl
Use of uninitialized value $tmp in concatenation (.) or string at glob.pl line 7.
4
###
1 glob.pl
2 glob.pl
3 glob.pl
4 glob.pl

submitted by /u/octobod
[link] [comments]




Hi,

I don't get why this produces a syntax error:

my %r = map { "a$_" => 1 } qw(q w);

yet this works:

my %r = map { "a" . $_ => 1 } qw(q w);

What is going on here?

submitted by /u/ghiste
[link] [comments]




Let me explain my goal.

Let's say I have a file with a set of paths to files:

/usr/lib32/libssl.so

/usr/lib32/libz.so

...

and so on.

What's an easy way in perl to turn that input into:

/usr/lib32/libssl.so /usr/lib32/libssl.so

/usr/lib32/libz.so /usr/lib32/libz.so

...

Basically duplicate every string to the same line, delimited by a space?

Thanks for any assistance. I use perl's regex regularly for substitutions and the like (instead of using sed) and I prefer PCRE to sed. That said, not familiar with a way to do this.

submitted by /u/ShiningRaion
[link] [comments]