in reply to Re: Overwrite file protection
in thread Overwrite file protection

It's funny you guys recommended using a while loop, as thats originally what I did in fact use. I'm assuming that when I had: -e <$upload_dir/$filename2 . "~" . $inc>; compared to your -e $upload_dir . '/' . $filename2 . '~' . $inc that it was possibly not matching the appended string correctly, and that may be where my problem was. But, after pasting in monsieur's code I was in fact incrementing correctly, Thanks Alot guys!

bW

Perl - the breakfast of Champions!

Replies are listed 'Best First'.
Re: Re: Re: Overwrite file protection
by monsieur_champs (Curate) on Jun 16, 2003 at 20:33 UTC

    I'm sorry. I should explain what's going on behind the scene:

    When you surround your filename expression (actually, a scalar holding the filename) with '<' and '>', what you get is a file glob. That's the name of this use of '<' and '>' surrounding a scalar designing a filename or something that looks like a file name set (think on it as the equivalent of using dir *.txt on the old D.O.S.).

    File globbing is used to do strange (not that strange, indeed) things with sets of filenames.

    The strange behavior of your script was because the file name globbing was working when you didin't like it to.

    Maybe I should rewrite this comment, I feel that it may confuse you. If it do so, please let me know and I will try to fix it up

    =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    Just Another Perl Monk

      I vote for a more detailed version of the post, Monsieur. I'd be interested in the strangeness, and I've never done fileglobbing before.


      “Every bit of code is either naturally related to the problem at hand, or else it's an accidental side effect of the fact that you happened to solve the problem using a digital computer.”
      M-J D

        A little introduction to Filename Globbing

        There are many ways to interact over filenames. One of the most flexible is file globbing.

        File globbing is a way to aquire filenames from your harddisk without having to run trought a directory tree. From the perlop manual:

        If what's within the angle brackets is neither a filehandle nor a simple scalar variable containing a filehandle name, typeglob, or typeglob reference, it is interpreted as a filename pattern to be globbed, and either a list of filenames or the next filename in the list is returned, depending on context. This distinction is determined on syntactic grounds alone. That means "<$x>" is always a readline() from an indirect handle, but "<$hash{key}>" is always a glob(). That's because $x is a simple scalar variable, but $hash{key} is not--it's a hash element.

        One level of double-quote interpretation is done first, but you can't say "<$foo>" because that's an indirect filehandle as explained in the previous paragraph. (In older versions of Perl, programmers would insert curly brackets to force interpretation as a filename glob: "<${foo}>". These days, it's considered cleaner to call the internal function directly as "glob($foo)", which is probably the right way to have done it in the first place.) For example:

        while (<*.c>) { chmod 0644, $_; }

        is roughly equivalent to:

        open(FOO, "echo *.c | tr -s ' \t\r\f' '\\012\\012\\012\\012'|" +); while (<FOO>) { chomp; chmod 0644, $_; }

        except that the globbing is actually done internally using the standard "File::Glob" extension. Of course, the shortest way to do the above is:

        chmod 0644, <*.c>;

        And that's it. I think you would like to take a deeper look at the perlop manual, and read more about this operator. Feel free to post a new question at Seekers of Perl Wisdom or ask me directly about this.

        =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
        Just Another Perl Monk