Hi,
Here is my code. Here I have hard coded my user name and password but password prompts.
For $username1 = $password1, and $username2 = $password2.
Here only $username2 = $password2 works.
For $username1 = $password1 contains @ and it takes only the character before @ "Case" and it doesn't take entire password.
I need you help to overcome this issue.
Regards,
Anand Mathan.
use strict;
use warnings;
my $username1 = "anand";
my $username2 = "girish";
my $password1 = "Case@123";
my $password2 = "Seat123#";
my $path = ("\"c:\\Program Files\\SecureFX\\sfxcl\"");
my $server = "gaddwuat02";
@trans_file = ("/Q"." "."c:\\eqsys.txt"." "."sftp://$username:"."$pas
+sword"."\@"."$server");
print "@trans_file\n";
my @trans = system("$path @trans_file");
| [reply] [d/l] |
Here is my code.
The problem is that your code does not compile under strictures (the use strict; statement; see strict). If use strict; is left out and the code is run under warnings alone (the use warnings; statement), Perl produces a bunch of warnings about uninitialized values and possible typos, warnings you should ponder well. Also take a look at the rules for interpolation discussed in the Quote and Quote-like Operators section of perlop; a careful Reading of this section of The Fine Manual would repay your effort. (Same as perldoc perlop from the command line.)
Here is an example of double-quote interpolation and single-quote non-interpolation. (These examples have been given before by others.) An example is also given of entering a string from the command line at a prompt. Note that once successfully entered, 'interpolating' characters do not interpolate further: Perl does not do multi-level or nested interpolation. Perhaps you can build on something like this example to demonstrate the problem(s) you are facing. (Note: I use qq{double quotes} rather than "double quotes" on my Windoze command line so that the code will not be cluttered by irruptions of backslashes.)
>perl -wMstrict -le
"my $def = 'hi there';
my @jkl = qw(foo bar);
;;
my $str1 = qq{abc$def};
my $str2 = qq{ghi@jkl};
;;
print qq{str1: :$str1:};
print qq{str2: :$str2:};
;;
my $str3 = 'pqr$def';
my $str4 = 'xyz@jkl';
;;
print qq{str3: :$str3:};
print qq{str4: :$str4:};
;;
;;
print 'enter password: ';
my $pw = <STDIN>;
chomp $pw;
;;
print qq{pw: :$pw:}
"
str1: :abchi there:
str2: :ghifoo bar:
str3: :pqr$def:
str4: :xyz@jkl:
enter password:
open@sez$me
pw: :open@sez$me:
| [reply] [d/l] [select] |
Thanks you all for your response.
Actually the issue is with the tool I am using.. It picks the server where it found the @. It consider as a server after @.
/Q c:\eqsys.txt sftp://v556837:Case@123@server1
In above case it picks 123 as hostname instead of server1.
I don't have any issues if password not used special character like @, $, % in between.
Regards,
Anand Mathan.
| [reply] |
BTW in Perl, when referring to a file on the system to read, write, execute, etc, you can use the normal Unix like path separator even in Windows. Another trick, by using 'single' quotes to stop interpolation of string contents, you don't need to \\ escape your slashes
# my $path = ("\"c:\\Program Files\\SecureFX\\sfxcl\"");
my $notepad = 'c:/Windows/notepad.exe';
system $notepad, 'C:\Boot.ini';
Cheers, R.
Pereant, qui ante nos nostra dixerunt!
| [reply] [d/l] |
As the others said, you can't put @ or $ into dobule quotes. Just change it to my $password1 = 'Case@123';
| [reply] [d/l] [select] |
| [reply] |