Bret Goodfellow wrote:
> Hi all,
>
> I am trying to evaluate a string, and determine if the last charater
> of the string has a backslash '\' . The piece of code I am using
> doesn't appear to work. What I've found with this peice of code is
> that if the string does contain a \, then the following code still
> adds another slash. If there is not backslash in the string, the the
> code appears to work fine by adding a backslash. Any ideas?
>
> print "Deleting old directory $dir_no: $Dir_name\n";
> $arg_length = length($ARGV[0]);
> $arg_lastchar = substr($ARGV[0], $arg_length-1, 1);
Why did you switch from $Dir_name to $ARGV[0]?
Anyway, this can be simplified to
$arg_lastchar = substr($ARGV[0], -1);
> print "last char is: $arg_lastchar\n";
> ################################################
> # add a \ if one was not present in argument #
> ################################################
> if ($arg_lastchar ne '\\' or $arg_lastchar ne '/') {
Logic flaw. This will always be TRUE. (*any* character will either be not a
backslash or not a forward slash.)
You want "and" (or "&&") instead of "or".
You can also use a regex and do the whole thing in one line:
$Dir_name .= '\\' unless ($Dir_name =~ m![\\/]\z!);
> $Dir_name = '\\' . $Dir_name;
> print "Adding \\ to: $Dir_name\n";
> }
I'm not sure what your code is doing overall, but you should typically use
modules like File::Spec, File::Basename, and File::Path for working with
directory and file names and paths in a portable fashion.
HTH,
Bob
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>