The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl
=head1 NAME

examples/scan.pl

=head1 SYNOPSIS

perl scan.pl /path/to/itunes/music/library.xml

=head1 DESCRIPTION

Parse an iTunes XML library and do something to each song

=cut

use warnings;
use strict;

use lib '../lib';
use Mac::iTunes::Library;
use Mac::iTunes::Library::XML;
use Mac::iTunes::Library::Item;

my $usage = "Usage: scan.pl <library.xml>\n";

die $usage if (scalar(@ARGV) != 1);
my $file = $ARGV[0];

# Make a new Library
print "Loading '$file'...";
my $library = Mac::iTunes::Library::XML->parse($file);
print " loaded " . $library->num() . " items.\n"; 

# Get the hash of items
my %items = $library->items();

foreach my $artist ( sort keys %items ) {
    print "$artist\n";

    # $artistSongs is a hash-ref
    my $artistSongs = $items{$artist};

    # Dereference $artistSongs so that you can pass it to keys()
    # $songName is a key in the $artistSongs hash-ref
    foreach my $songName (sort keys %$artistSongs) {
        # The songs are stored as an array, because there can
        # be multiple songs with identical names
        my $artistSongItems = $artistSongs->{$songName};

        # Go through all of the songs in the array-ref
        foreach my $song (@$artistSongItems) {
            print "    " . $song->name() . "\n";
        }
    }
}

=head1 SEE ALSO

L<Mac::iTunes::Library>

=head1 AUTHOR

Scott Lawrence (http://linkedin.com/in/scottdlawrence)

=head1 CONTRIBUTORS

Drew Stephens <drew@dinomite.net>, http://dinomite.net

=head1 SVN INFO

$Revision: 52 $
$Date: 2008-08-05 23:38:33 -0700 (Tue, 05 Aug 2008) $
$Author: drewgstephens $

=cut

=head1 COPYRIGHT AND LICENSE

Copyright (C) 2008 by Drew Stephens

This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself, either Perl version 5.8.8 or,
at your option, any later version of Perl 5 you may have available.

=cut