How to assign the match of string to another variable in perl?

I try to assign the matched result to another variable but instead the other variable gets the value 1 which means that there is match.

Here is the example:

my ($clientRoot) = $infoArray[3] =~ /Client root:\s.*/;

Open in new window



$infoArray[3]  is something like this: Client root: some/path/in/here

Expected result for $clientRoot:

some/path/in/here

Open in new window

TolgarAsked:
Who is Participating?
 
brendonfeeleyCommented:
This should work:

my $clientRoot= $1 if $infoArray[3] =~ /Client root:\s(.*)/;
0
 
TolgarAuthor Commented:
I normally use my other pattern but why didn't it work in here? Is it because I have an array instead of a single variable?
0
 
wilcoxonCommented:
Or, more verbosely:
if ($infoArray[3] =~ m{Client root:\s+(.*)}) {
    $clientRoot = $1;
}

Open in new window

Or, more compactly:
my ($clientRoot) = ($infoArray[3] =~ m{Client root:\s+(.*)});

Open in new window

0
Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

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.

 
brendonfeeleyCommented:
You can do it this way:

my ($clientRoot) = $infoArray[3] =~ /Client root:\s(.*)/;

Only difference is the capturing group in the regex.
0
 
wilcoxonCommented:
Your original pattern did not work because you forgot the capturing parens (see my second option for the correct equivalent of your original idea (which I missed when reading the question)).  The parens around the match may not be required in mine but I usually include them just to make precedence explicit.
my ($clientRoot) = ($infoArray[3] =~ m{Client root:\s+(.*)});

Open in new window

0
 
käµfm³d 👽Commented:
It did work, but the only thing output is the entire match. This is because you didn't specify any capture groups (parentheses, like brendonfeeley demonstrated). When you capture the result of a regex in list context in Perl, the capture groups are what are output to the variable. Since you didn't specify any groups, the output reverted to the overall match.
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.