explain code please

Could someone explain step by step what this code does please ?

/^2,[^,]*,[^,]*,[^,]*,[^,]*,(\d+)/ &&  $c{$1}++ while <M>;
Europa MacDonaldChief slayer of dragonsAsked:
Who is Participating?

[Webinar] Streamline your web hosting managementRegister Today

x
 
TintinConnect With a Mentor Commented:
This is a shorthand way of writing

while (<M>) {
   if (/^2,[^,]*,[^,]*,[^,]*,[^,]*,(\d+)/) {
      $c{$1}++
   }
}

Open in new window


To break it down, the first bit is the regex

/^2,[^,]*,[^,]*,[^,]*,[^,]*,(\d+)/

This means any line (read from the file referenced by filehandle 'M') that

starts with 2  ^2
followed by zero or one character that isn't a comma  [^,]*
followed by a comma ,
...
the last part captures one or more digits (\d+)

This will match things like:

2,3,4,5,6,7
2,,,,,7
2,,4,5,6,7
etc

The last digit captured by the (\d+), which in the above examples is 7, is then used to increment the hash c, so effectively

$c{7}++

The hash is most likely used to count the total number of digits that are matched in the file.

The while <M> is simply a while loop using whatever filename is opened and assigned to the M filehandle.
0
All Courses

From novice to tech pro — start learning today.