DEV Community


Weekly Challenge 110

simongreennet profile image Simon Green ・2 min read

Challenge, My solutions

TASK #1 › Valid Phone Numbers


You are given a text file. Write a script to display all valid phone numbers in the given text file.

My solution

Let's start with what is a valid phone number. I can tell you only the phone number starting with + would actually work from where I am. But for the task I guess this isn't really important.

If I was doing this outside the task, I would have used Path::Tiny to read the file. As regular readers would know, I prefer not to use modules that aren't part of core Perl in these challenges.

For this task, I simply read the file line-by-line and output a line if it matches the regular expression /^(?:\+[0-9]{2}|\([0-9]{2}\)|[0-9]{4}) [0-9]{10}$/. I use 0-9 as \d includes digits in other languages.


» ./ input1.txt 
0044 1148820341
+44 1148820341
(44) 1148820341
Enter fullscreen mode Exit fullscreen mode

TASK #2 › Transpose File


You are given a text file. Write a script to transpose the contents of the given file.

My solution

This task didn't mention the format is CSV, although the example would indicate the input is a CSV file. Outside the challenge I would probably use Text::CSV as this correctly handles escaping of values with commas in them.

For this task I read the input file and create an array of arrays with the values found called @lines. I then loop through each column and use map { $_->[$col] // '' } @lines and the join method to display each row of the output.

The logical-defined-or // is used in case some rows do not have the same number of columns and will prevent undef warnings in the output (albeit it to STDERR).


» ./ input2.txt
Enter fullscreen mode Exit fullscreen mode

Discussion (0)

Editor guide