[ale] Perl Help split stopped working recently

Mike Fletcher fletch at phydeaux.org
Thu Dec 1 15:48:42 EST 2022




> On Dec 1, 2022, at 13:59, DJPfulio--- via Ale <ale at ale.org> wrote:
> 
> Thanks!  So I'm not crazy. It should work!
> 
> For perl-5.33.8 and 5.30.x:
> 
> $ ./t.pl in.test
> Use of uninitialized value $stop_time in concatenation (.) or string at ./t.pl line 17, <> line 1.
> Line:   5:00 AM - 6:00 AM Live
>          5:00 AM - 6:00 AM Live,
> Use of uninitialized value $stop_time in concatenation (.) or string at ./t.pl line 17, <> line 2.
> Line:   6:00 AM - 7:00 AM New
>          6:00 AM - 7:00 AM New,
> 
> 
> Note how the output with 2 parameters shows the ',' at the end? That's because split() didn't do anything.  Initially, I thought a different '-' character was being provided. Nope. Nothing different there.
> 
> So, that got me thinking.  The input source changed the whitespace characters! Because I only email with 7-bit ASCII, nobody here saw that.
> 
> Thanks again.  I'll be replacing whitespace in the input lines to ASCII now. That should prevent any likely issues. Hopefully.
> 

Using \s+ or [[:space:]]+ instead should handle anything one or more white space y (prossibly even Unicode if you use binmode or the right io discipline when you open)



> 
>> On 12/1/22 12:57, Leam Hall via Ale wrote:
>> Here's what I got From Perl 5.32.1:
>> ./for_dj.pl < dj.file
>> Line: 5:00 AM - 6:00 AM Live
>>       5:00 AM, 6:00 AM Live
>> Line: 6:00 AM - 7:00 AM New
>>       6:00 AM, 7:00 AM New
>> From (hand typed):
>> #!/usr/bin/env perl
>> use strict;
>> use warnings;
>> use utf8;
>> my $start_time = "";
>> my $stop_time = "";
>> while (<>){
>>     chomp;
>>     my $line = $_;
>>     ($start_time, $stop_time ) = split( / - /, $line, 2 );
>>     print "Line: $line\n \t $start_time, $stop_time \n";
>> }
>>> On 12/1/22 11:11, DJPfulio--- via Ale wrote:
>>> 
>>> I have this complete, simple, perl program ...
>>> 
>>> ==
>>> #!/usr/bin/env perl
>>> use strict;
>>> use warnings;
>>> use utf8;
>>> 
>>> my $start_time = "";
>>> my $stop_time = "";
>>> 
>>> while (<>){
>>>   chomp;
>>>   my $line = $_;
>>> 
>>>    ( $start_time, $stop_time ) = split( / - /, $line, 2);
>>> 
>>>     print "Line: $line\n \t $start_time, $stop_time\n";
>>> }
>>> ==
>>> 
>>> And I feed it this input file:
>>> 
>>> ==
>>>    5:00 AM - 6:00 AM Live
>>>    6:00 AM - 7:00 AM New
>>> ==
>>> 
>>> This pattern for split is something I've used for over 25 yrs and 2 weeks ago, it was working as expected.  Today, it doesn't work.  The $stop_time isn't being set.  split() ain't workin'.  The $start_time ends up with a copy of the line.
>>> 
>>> Tried with perl v5.30 and v5.33 on 2 different systems. Same results.
>>> 
>>> I expect the start to be "  5:00 AM" and the stop to be "6:00 AM Live" for the first input after the split().
>>> 
>>> Any ideas?  I'm assuming it is something dumb, but for something this simple, I'm just missing it.
>>> _______________________________________________
>>> Ale mailing list
>>> Ale at ale.org
>>> https://mail.ale.org/mailman/listinfo/ale
>>> See JOBS, ANNOUNCE and SCHOOLS lists at
>>> http://mail.ale.org/mailman/listinfo
> 
> _______________________________________________
> Ale mailing list
> Ale at ale.org
> https://mail.ale.org/mailman/listinfo/ale
> See JOBS, ANNOUNCE and SCHOOLS lists at
> http://mail.ale.org/mailman/listinfo


More information about the Ale mailing list