PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : perl newbie sucht tutor (glaub ich)?



Peter der Große
24-01-2004, 20:29
hi

ich hab mir in den letzten drei tagen, das buch einführung in perl reingezogen.
ist echt nicht schlecht, aber ich hab oft keine ahnung was ich da gerade mache?
Ja, mir wird selbst angst dabei!

darum, hab ich mir gedacht, frag mal hier im forum.

ich will, so zur übung, ein script schreiben, dass audio-cd's in mp3's umwandelt.
natürlich mit einer cddb abfrage, und automatischer playlisterstellung.

also das ist mein erstes perl-script, bitte bei der kritik berücksichtigen


#!/usr/bin/perl -w

#------------------------------------------------------------------------------
#Module
#------------------------------------------------------------------------------

#use Net::CDDB; # Kann das kack modul leider nicht finden ist aber laut apt-get istalliert

#-------------------------------------------------------------------------------
# Variablen
#-------------------------------------------------------------------------------

# Arbeitsverzeichniss des Script's
#
$scrdir="/mp3/script" ;

#-------------------------------------------------------------------------------
# Subroutinen
#-------------------------------------------------------------------------------

#-------------------------------------------------------------------------------
# Die eingelegte CD wird über CDDB abgefragt
#

sub getcddb {

if (system 'isdnctrl status ippp0 > /dev/null') {
print "Sie sind nicht mit dem Internet verbunden! Wählen Sie sich bitte ein.\n";
}

else {

if (system `dagrab -d /dev/cdrom -H www.freedb.org -P 888 -Ci > $scrdir/cddb.tmp`) {

# Macht man das so? eine tmp datei?

print "Die CDDB-Anfrage war erfolgreich!\n";
}
}
}


sub getcddbint {

# cddb abfrage mit perl modul

if (system 'isdnctrl status ippp0 > /dev/null') {
print "Sie sind nicht mit dem Internet verbunden! Wählen Sie sich bitte ein.\n";
}

else {

my $disc_data=`discid`;
chomp ($disc_data);

my ($cat,$disc_id,$artist,$title) = cddb_query($disc_data);

print "$cat\n";
print "$disc_id\n";
print "$artist\n";
print "$title\n";

my ($title,@tracks) = cddb_read("$cat $disc_id");
my $num_tracks = $#tracks + 1;

print "$title\n";
print "$num_tracks";

foreach (@tracks) {
$num++;
print "$num. $_\n";
}
}

#------------------------------------------------------------------------------
# Das Album und der Interpret werden gespeichert
#

sub cdinfo {

open CDDBTMP, "$scrdir/cddb.tmp"
or die "Huch! Wo ist denn die Datei hingekommen?\n";

while (<CDDBTMP>) {
if ( /(DISK: )\s(.*)\s\/\s(.*)/ ) {
$artist="$2";
$album="$3";
}
}
close CDDBTMP;
}

#------------------------------------------------------------------------------
# Die Titel werden in ein Array gespeichert
#

# sieht auch irgendwie seltsam aus, funktioniert aber!

sub titles {

open CDDBTMP, "$scrdir/cddb.tmp"
or die "Huch! Wo ist denn die Datei hingekommen?\n";

while (<CDDBTMP>) {
if ( /\s*(\d*)\s*\d*\s*\d*\s\w*\s*(\d*:\d*:\d*)\s*\d*\s* \d*\s*(.*)/ ) {
push @tracks, $1;
push @times, $2;
push @titles, $3;
# print "$1 - $2 - $3\n";
}
}
close CDDBTMP;
}

#------------------------------------------------------------------------------
# CD auf Festplatte rippen
#

sub cdrip {
print "Rippe CD\n";
if (system `dagrab -a &> /dev/null `) {
print "Rippen beendet\n";
}
else {
print "Rippen fehlgeschlagen\n";
}
}

#------------------------------------------------------------------------------
# Wav => MP3
#

sub wav2mp3 {

@wav = <$scrdir/*.wav>;
foreach (@wav) {
$titles1 = pop @titles;
$tracks1 = pop @tracks;
$opt="-b 192 -m s -h --tt $titles1 --tl $album --ta $artist -tn $tracks1";

# wo soll ich die variablen abspeichern?

print "$opt\n";

system "lame", "$opt", "$_";
}
}

#------------------------------------------------------------------------------
# Test Subroutine
#

sub testing {

#print "$artist\n";
#print "$album\n";

#foreach (@tracks) {
# print "$_\n";
# }
foreach (@wav) {
print "$_\n";
}

}

#------------------------------------------------------------------------------
# Aufrufen der Subroutinen
#------------------------------------------------------------------------------

#&getcddb;
&getdccbint;
#print "$?\n";
#&cdinfo;
#&titles;
#&wav2mp3;
#&testing;
also, wenn jemand so freundlich wäre und jetzt kritik an der syntax
und den anderen dingen nehmen würde, wäre dass schon mal toll!

benutzt man so subroutinen?
soll ich use strict benuzen?

ich hab das script auch gleich mal angehängt, vielleicht findet sich ja einer der
es ein bischen modifiziert.

sers

peter der große

fork
25-01-2004, 13:05
Da gibt's schon Ripper-Script in perl: heisst ripit.pl oder so ähnlich.

Tobias

Peter der Große
25-01-2004, 13:53
hi,

@fork
bei mir ist der weg das ziel!

würde mir aber schon mal gern das script ansehen.
wo?

mfg
p-d-g

micha
25-01-2004, 17:43
Original geschrieben von Peter der Große
würde mir aber schon mal gern das script ansehen.
wo?


http://freshmeat.net/projects/ripit

Gruß micha

Peter der Große
25-01-2004, 18:06
wow!

vielleicht sollte ich mit etwas einfacherem anfangen! ja, wird wohl besser sein.
da gibts noch einiges, dass ich zu lernen hab (module, IO, etc):confused:

vielen dank schonmal!
kennt jemand ne adresse mit ein haufen perl scripts zum abgucken?

sers
peter