MVRS has asked for the wisdom of the Perl Monks concerning the following question:

How can i pass command line argument with filenames containing spaces in perl, here am sending a sample code which i want to process two different files with names spaces in them

#!/usr/bin/perl use strict; use warnings; my $re; my $qu; $re = $ARGV[0]; $qu = $ARGV[1]; print $re,"\t",$qu,"\n";

for example this is the input file-1(LG 19158.f)and File2 (LG 20546.f

)

Thanks in advance ,please suggest me in fixing this

  • Comment on How to pass command line arguments with file names containing spaces
  • Download Code

Replies are listed 'Best First'.
Re: How to pass command line arguments with file names containing spaces
by hdb (Monsignor) on Oct 09, 2013 at 06:02 UTC

    Depends on the operating system you are on (or the shell you are using). In Windows, enclose your filenames in quotes, in *IX you can also escape the spaces with a backslash in front of them.

Re: How to pass command line arguments with file names containing spaces
by marinersk (Priest) on Oct 09, 2013 at 08:15 UTC
    hdb is spot on.

    You need do nothing special inside Perl to handle it. Merely how you specify these files on the command line.

    If you make system calls using these filenames (or other forms of external-to-Perl operations) you likely will again need to honor the needs of your operating system.

    But for as long as you're inside Perl, doing native Perl stuff, it is unlikely the spaces will require you to change the way you handle your code.

    C:\Test>perl mongo.pl "Test 1.dat" C:\Test>perl mongo.pl "Test *.dat" C:\Test>perl mongo.pl Test*.dat

    All these should work.

      Thank you very much for the reply HDB , sorry i jus made a sample code , but i again make system calls and other perl operations as in the following code , please suggest me in this , and am running this code in linux environment

      #!/usr/bin/perl use strict; use warnings; my $re; my $qu; $re = $ARGV[0]; $qu = $ARGV[1]; print $re,"\t",$qu,"\n"; $match = system(mer -maxmatch "$re" "$re"); $camp = system(mer -cods "$re" "$qu"); system (perl ma.pl "$re" "$qe");

        This is not even valid Perl code, as it does not compile.

        Please take care to test your code and to reduce it to the actual problem. Maybe you want to review system? It shows how to use that function. Also, you may want to learn about quoting, and the difference between strings (what system takes as arguments) and bare, unquoted words in Perl (what perl takes as commands in a program.