irname($_).'/'.basename($_) should yield the original value of $_, right?

Nope :-)

It returns the dirname(), a slash, and the basename() appended together.

File::Basename just deals with strings. It doesn't do any file system checks. So when it sees:

/foo/bar/

It knows that bar is a directory because of the trailing slash. So the basename is the empty string.

With:

/foo/bar

there is no trailing slash so the basename is bar.

To quote from the docs:

The fileparse() routine divides a file specification into three parts: a leading path, a file name, and a suffix. The path contains everything up to and including the last directory separator in the input file specification. The remainder of the input file specification is then divided into name and suffix based on the optional patterns you specify in @suf- fixlist. Each element of this list can be a qr-quoted pattern (or a string which is interpreted as a regular expression), and is matched against the end of name. If this succeeds, the matching portion of name is removed and prepended to suffix. By proper use of @suffixlist, you can remove file types or versions for examination.

You are guaranteed that if you concatenate path, name, and suffix together in that order, the result will denote the same file as the input file specification.


In reply to Re: Bug? in File::Basename by adrianh
in thread Bug? in File::Basename by tommyw

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.