map

I have
$output = "X123456 X234567 X234568
X123452 X234562 X234561
X123422 X234533 X234522";

how can i grep only the 5 digits and save it in array @codeword

can i do using map?
perlperlAsked:
Who is Participating?
 
Harisha M GConnect With a Mentor Commented:
Hi,

try

@output = split (/\s/, $output);


---
Harish
0
 
perlperlAuthor Commented:
i tired

@output = split (/ /, $output);
my @codeword = map { /(X\d{5})/ } @output;

teh output i get, is
234567 234568 234562 234561 234533 234522


0
 
perlperlAuthor Commented:
sorry the output was
123456 234567 234568 234562 234561 234533 234522


it skips the first element forn second row onwards
0
Free Tool: SSL Checker

Scans your site and returns information about your SSL implementation and certificate. Helpful for debugging and validating your SSL configuration.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 
perlperlAuthor Commented:
if i try  \s

teh output i get is
234567 234568  123452 234562 234561 1231422 234533 234522

i get everything except the first elemnt 123456


just clarification, i m using
my @codeword = map { /(X\d{6})/ } @output;


there was typo above where i specified 5
0
 
perlperlAuthor Commented:
this worked fine but i don't like this format

@output = split(/\n/,$output);
for($i = 0; $i < @output; $i++) {
 @code = split(/ /, $output[$i]);
 @c = map { /(X\d{6})/ } @code;
@subset_ucode = ( @subset_ucode ,@c);
}
print "@subset_ucode \n";
0
 
Harisha M GCommented:
I got this:
X12345 X23456 X23456 X12345 X23456 X23456 X12342 X23453 X23452


the code was:

$output=  "X123456 X234567 X234568
X123452 X234562 X234561
X123422 X234533 X234522";

@output = split (/\s/, $output);
@codeword = map { /(X\d{5})/ } @output;

print "@codeword";

If you want the digits, then change

@codeword = map { /(X\d{5})/ } @output;

to

@codeword = map { /X(\d{5})/ } @output;
0
 
perlperlAuthor Commented:
oops sorry my bad...

that works
0
 
perlperlAuthor Commented:
why \s worked.
can u pls explain
0
 
Harisha M GCommented:
\s means whitespace. It includes space, tab and newline character
0
 
perlperlAuthor Commented:
Got it!!!

Thanks a lot
0
 
Perl_DiverCommented:
$output = "X123456 X234567 X234568
X123452 X234562 X234561
X123422 X234533 X234522";

@codeword = $output =~ /(\d+)/g;

print "@codeword";

0
 
ozoCommented:
what exactly do you want in @codeword?  you say you want only the 5 digits, but everything in $output  looks like it has 6 digits
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.