http://www.perlmonks.org?node_id=1011302

huchister has asked for the wisdom of the Perl Monks concerning the following question:

I would like to change directory string. Here is the example URL.
my $dir_str = "test/home/players/demo//thumbs/super.jpg";
I am trying to remove 'demo//thumbs' part to 'demo/thumbs' Is there easier way to put this? I am trying to use s/ method.

Replies are listed 'Best First'.
Re: Need to change directory string.
by toolic (Bishop) on Jan 02, 2013 at 16:20 UTC
    Here's one way using s///:
    use warnings; use strict; my $dir_str = "test/home/players/demo//thumbs/super.jpg"; $dir_str =~ s{//+}{/}g; print "$dir_str\n"; __END__ test/home/players/demo/thumbs/super.jpg

    UPDATE: fixed typo. Thanks Athanasius

      Well, this produces .../demothumbs/..., but the OP states that he wants .../demo/thumbs/.... So a small amendment is needed:

      2:29 >perl -wE "$d = 'test/home/players/demo//thumbs/super.jpg'; $d = +~ s[/{2,}][/]g; say $d;" test/home/players/demo/thumbs/super.jpg 2:34 >

      Hope that helps,

      Athanasius <°(((><contra mundum Iustus alius egestas vitae, eros Piratica,

Re: Need to change directory string.
by 2teez (Vicar) on Jan 02, 2013 at 20:54 UTC

    "..Is there easier way to put this?.."

    Another way is to use canonpath method from File::Spec like so:

    use strict; use warnings; use File::Spec qw(canonpath); my $dir_str = "test/home/players/demo//thumbs/super.jpg"; print File::Spec->canonpath($dir_str);
    Output:
    test/home/players/demo/thumbs/super.jpg

    NOTE:
    No physical check on the filesystem, but a logical cleanup of a path.

    If you tell me, I'll forget.
    If you show me, I'll remember.
    if you involve me, I'll understand.
    --- Author unknown to me