On Thu, Apr 01, 2004 at 07:05:51PM -0500, Morbus Iff wrote:

> Earlier this morning, a friend of mine asked me for a script that would
> "given a list of files, replace underscores with spaces", to take this:
> 
>   Artist_Name-Track_Name.mp3
> 
> and rename it to this:
> 
>   Artist Name-Track Name.mp3
> 
> The script was mindlessly simple, and I felt it would be a good HOWTO
> for the perl beginners crowd, if not to show some good code practices,
> but also to counteract the . .. .. . "controversial" HOWTO that had
> been posted a week or so ago. Certainly, if you find this as misguided
> as his, complain onlist with better examples, or offlist with anger.
> 
> The first bit of code I wrote him was below. Save for
> the additional explanatory comments, it's nearly exact.

[ snip ]

> And that's the script. For readability, no comments:
> 
>  #!/usr/bin/perl
>  use warnings;
>  use strict;
> 
>  opendir(DIR, ".") or die $!;
>  my @files = readdir(DIR);
>  close(DIR);
> 
>  while (@files) {

Are you sure that's not:

   for (@files) {

?

>     next if -d;
>     next if /^\./;
>     next unless /_/;
> 
>     my $new_name = $_;
>     $new_name    =~ s/_/ /g;
>     rename($_, $new_name) or die $!;
>  }
> 
> It worked fine for him, and we moved on. A few hours later, he
> asked for a recursive version, and whether that would be "hard
> to do". While I wasn't around to help him out, the weak solution
> was easy: just move the script into each new directory and run
> it again. But, there are two other solutions to this new request:
> the bad one, and the good one.

Here's a third:

  $ rename 'y/_/ /' **/*(.)

That's zsh globbing and rename that used to come with perl.  rename is
now part of debian, and google tells me it can be found at:

  http://www.hurontel.on.ca/~barryp/menu-mysql/music_rename-1.12c/rename

Though I'll admit that that solution doesn't provide so many
opportunities for learning Perl.

-- 
Paul Johnson - [EMAIL PROTECTED]
http://www.pjcj.net

-- 
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