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>


Reply via email to