Re: Par not working on Net::FTP::Recursive Script

[email protected] (Mike Flannigan)
Newsgroups perl.par
Message-ID <[email protected]>
On 8/8/2015 1:36 AM, [email protected] wrote:
> This is a more general problem than PAR.
>
> I've had similar issues with input files when I was alternating 
> between cygwin and normal windows in the distant past. 
> Data::Section::Simple also does the same thing, in that it does not 
> translate crlf endings when loading from a data block on linux.  I 
> expect there are many other ways of hitting this issue.
>
> The solution I use is to remove the crlf line endings in my code, e.g.:
>
> s/[\r\n]+$// for @data;
>
> or, more verbosely but more clearly:
>
> for my $item (@data) {
>     $item =~ s/[\r\n]+$//;
> }
>
> Regards,
> Shawn.


Thanks for that fix.  I was too lazy to carry this forward
until I saw your e-mail.  Of course it worked.  The script
works in both PAR and regular Perl when putting that regex
in there.

Thanks to everyone for all the help.


For my records I have summarized most of the e-mails on this
subject below.


Mike




------------------------------------------------------------------------



Subject:
Par not working on Net::FTP::Recursive Script
From:
Mike Flannigan <[email protected]>
Date:
8/2/2015 12:51 PM

To:
[email protected]



I have a script that runs fine in Perl64, but when I do

pp -o uploadfiles.exe inputfile.pl

and try to run uploadfiles.exe it opens a prompt
box and tries to connect to a HostGator account,
but after a few seconds gives
"login authentication failed".

The script uses this:

use strict;
use warnings;
use File::Find;
use Net::FTP::Recursive;
$| = 1; #Autoflush STDOUT


Anybody have any ideas on why this is not working?
This is Activestate Perl 5.16.3 built for
MSWin32-x64.


Mike

------------------------------------------------------------------------



Subject:
Re: Par not working on Net::FTP::Recursive Script
From:
Roderich Schupp <[email protected]>
Date:
8/2/2015 2:03 PM

To:
Mike Flannigan <[email protected]>
CC:
"[email protected]" <[email protected]>


On Sun, Aug 2, 2015 at 7:51 PM, Mike Flannigan <[email protected] 
<mailto:[email protected]>> wrote:

    The script uses this:


Not enough information. For instance, how does it "open a prompt box"?
Try cutting the script down to a minimal example that exhibits the problem.

Cheers, Roderich


------------------------------------------------------------------------



Subject:
Re: Par not working on Net::FTP::Recursive Script
From:
Mike Flannigan <[email protected]>
Date:
8/2/2015 6:09 PM

To:
Roderich Schupp <[email protected]>
CC:
"[email protected]" <[email protected]>




In Windows when you double click on a par exe file it opens
a command prompt box to show the results of the script.

I guess a minimalist script would be as follow:

use strict;
use warnings;
use Net::FTP::Recursive;

my $ip="142.146.2.103";
my $username="user";
my $pass="pass";

my $ftp = Net::FTP::Recursive->new($ip, Passive => 1, Debug => 0);

$ftp->login($username, $pass) or die $ftp->message;

print "All done.\n\a";

__END__


Interestingly, this seems to work in the par exe created
from this file.


OK, I haven't figured it out 100% yet, but it appears to have
something to do with the newline at the end of each of these
lines:

__DATA__
BkmTNBOhAQjsn3YUJWA9cw2JDp8lcw
Jx7ecihoLGsWidVUgRDl5CI38mpLbF
23X7p1HDSwXgGg4z8xSNshVBQScLCB
MkNyVS4Dnkx55TsW1VfCVm7niOU777

In my Windows Perl environment when I count
22 characters forward, I get the character I expect
to get.  In the par environment, when I count
22 characters forward I get the character at position 21
instead (if it goes past the end of one of the lines).  Perhaps
this has something to do with a newline being interpreted as
\n\r or \n or \cJ or whatever.

I'm probably going to have an ugly work-around for this.  Or
perhaps I can come up with a more elegant work-around when
using par.  We will see.

Thanks for your help.


Mike


------------------------------------------------------------------------



Subject:
Re: Par not working on Net::FTP::Recursive Script
From:
Roderich Schupp <[email protected]>
Date:
8/3/2015 9:44 AM

To:
Mike Flannigan <[email protected]>
CC:
"[email protected]" <[email protected]>


On Mon, Aug 3, 2015 at 1:09 AM, Mike Flannigan <[email protected] 
<mailto:[email protected]>> wrote:

    OK, I haven't figured it out 100% yet, but it appears to have
    something to do with the newline at the end of each of these
    lines:

    __DATA__
    BkmTNBOhAQjsn3YUJWA9cw2JDp8lcw


Good observation! I packed the following script (and checked that it has 
Windows CRLF line endings)

--- snip ---
use strict;
use warnings;
use Data::Dumper;
$Data::Dumper::Useqq = 1;
my @data = <DATA>;
print Dumper(\@data);
__DATA__
fooy
bar
quux
--- snip ---

$ perl data.pl <http://data.pl>
$VAR1 = [
           "foo\n",
           "bar\n",
           "quux\n"
         ];

but when I pack it

$ pp -o data.exe data.pl <http://data.pl>
$ .\data.exe
$VAR1 = [
           "foo\r\n",
           "bar\r\n",
           "quux\r\n"
         ];

I checked the script as packed into data.exe and it has its CRLF endings 
intact.
But the hack that's used to actually run it (i.e. PAR::_run_member) uses 
a filehandle opened in binmode.
Looks like the implicit DATA filehandle inherits this setting somehow.

I'll have to think some more whether changing PAR::_run_member might 
have side effects.

Cheers, Roderich



------------------------------------------------------------------------


Subject:
Re: Par not working on Net::FTP::Recursive Script
From:
Mike Flannigan <[email protected]>
Date:
8/3/2015 5:33 PM

To:
Roderich Schupp <[email protected]>
CC:
"[email protected]" <[email protected]>




Thanks for confirming that.  Chomp certainly doesn't fix
the problem.  Oddly I couldn't get the variable I wanted
no matter what I did!  I always got the variable in front of
or behind the one I wanted, even though I only moved the
array index by one.

I finally gave up and removed all the newlines.  I just
put all the data on one line now.

It's a bit frustrating, but I have my fix.
I'm surprised I was the one to point this out.
Must be very few of us Windows par users.


Mike



------------------------------------------------------------------------


Subject:
Re: Par not working on Net::FTP::Recursive Script
From:
Roderich Schupp <[email protected]>
Date:
8/4/2015 9:03 AM

To:
Mike Flannigan <[email protected]>
CC:
"[email protected]" <[email protected]>


On Tue, Aug 4, 2015 at 12:33 AM, Mike Flannigan <[email protected] 
<mailto:[email protected]>> wrote:

    Thanks for confirming that.  Chomp certainly doesn't fix
    the problem.


chomp won't help, in my example it will only get you from

$VAR1 = [
           "foo\r\n",
           "bar\r\n",
           "quux\r\n"
         ];

to

$VAR1 = [
           "foo\r",
           "bar\r",
           "quux\r"
         ];

By default, chomp doesn't strip CR LF, as $/ is "\n" even on Windows.
Reading a file on Windows in non-binmode will convert CR LF to "\n".



My guess would be that the majority of PAR users is on Windows, but 
using __DATA__ is rare.
Or at least using the data in a way that is susceptible to CRLF v LF 
corruption.

Cheers, Roderich


------------------------------------------------------------------------




Subject:
Re: Par not working on Net::FTP::Recursive Script
From:
Shawn Laffan <[email protected]>
Date:
8/3/2015 6:44 PM

To:
<[email protected]>




On 4/08/2015 8:33, Mike Flannigan wrote:


This is a more general problem than PAR.

I've had similar issues with input files when I was alternating between 
cygwin and normal windows in the distant past. Data::Section::Simple 
also does the same thing, in that it does not translate crlf endings 
when loading from a data block on linux.  I expect there are many other 
ways of hitting this issue.

The solution I use is to remove the crlf line endings in my code, e.g.:

s/[\r\n]+$// for @data;

or, more verbosely but more clearly:

for my $item (@data) {
     $item =~ s/[\r\n]+$//;
}

Regards,
Shawn.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.