Once you fill out in as payday loans payday loans stated before payday loans.

By uskatpayday loans

Perl for Retarded ppl


is
Bonita foto del osito bimbo (la botarga de atras malpensados)…

CASH: Gracias por esta participacion Ines

INESITA: A ti, tenia mucho tiempo queriendo participar en tu afamado blog.

CASH: Como esta eso de que ya Amarok no sirve? que no todos los pinches linuxeros decian que era la mata?

is
Poniendose guapa para la entrevista…

INESITA: Como lo has dicho, mi estimado, simpatico y atractivo Cash,ERA, Amarok era un proyecto que tenia una gran base de usuarios instalada, esto en la version 1.x, pero el proyecto tomo otro rumbo en la 2.x queriendo ampliar su base de usuarios cambiaron de tajo a un proyecto compilable en otras plataformas incluyendo windows con una interface totalmente diferente y quitando muchisimas funcionalidades que se tenian en la 1.x, a pesar del desagrado de la comunidad de usuarios ellos continuan en ese rumbo y lo peor aun dejando sin soporte ni actualizaciones la version anterior, los usuarios mas o menos han arreglado parchando codigo problemas surgidos, como soporte para ipods nano de la 4ta generacion y cambios en busquedas de wikipedia, pero ya son muchas cosas las que han dejado de funcionar y es impractico seguir parchando (sin albur) uno el codigo.

CASH: Pinches linuxeros cuichis

is
Amarok 1.x era el “Brasil” de los mundiales, el 2.x es el “Mexico”…

INESITA: Entonces, muchos nos quedamos en busca de nuevas alternativas, las cuales hay muchas, la mas recomendable es songbird de la fundacion mozilla, sin embargo existe muchagente con coleciones muy grandes que en Amarok ya la tenian configurada (CD covers, ratings), conozco a un wey que el enfermo tenia la coleccion de 30 gigas toda taggeada y con los covers para cada cancion, Amarok guarda la imagen del cover con un nombre raro que es un “checksum” del nombre del disco y artista en bajas

[cash@influenza ]# echo -n "iron maidenpiece of mind" | md5sum
2616d94042fc7a849a3a4beff51875c6  -

Asi que me aventure a realizar un script en perl para poder migrar los covers de mi amigo y ponerlos en el mismo mp3 pqara que sean leidos por cualquier player

CASH: Saliste mas cabrona que bonita inesita…

INESITA: Tu no eres feo Cashito, si no fueras tan rejego y me pelaras…

CASH: Aguantame un rato, platicanos tu script mejor…

is
VIVA LA AMAROK!!

INESITA: Bueno, este es solo un inicio, como dicen los gringos “WARNING: TEST YOUR SCRIPT ON A COPY OF YOUR COLLECTION” o como diria Bullwinkle, “es tu pedo si esta madre te echa a perder tus mp3, mejor copialos antes”

Para empezar es necesario crear una lista de reproduccion con TODA la coleccion y guardarla a disco a un arcchivo m3u

cash@cashito:~/amarokfiles$ cat 10000.m3u
#EXTINF:393,Holy Wars... The Punishment
../../cash/CarAudio/Thrash/01-Holy Wars, The Punishment Due.mp3
#EXTINF:312,Hanger 18
../../cash/CarAudio/Thrash/02-Hangar 18.mp3
#EXTINF:207,Take No Prisoners
../../cash/CarAudio/Thrash/03-Take No Prisoners.mp3
#EXTINF:340,Five Magics

INESITA: Las lineas “#EXTINF:393,Holy Wars… The Punishment” no nos interesan asi que con algun script filtramos las lineas que interesen hasta que quede un archivo con las rutas

cash@cashito:~/amarokfiles$ more paths
/home/cash/CarAudio/Thrash/01 - March of the SOD.mp3
/home/cash/CarAudio/FavoritasBB/08 - Mask Mask - Elaka Arne.mp3
/home/cash/CarAudio/FavoritasBB/25 - Trampar I Min Mormors Rabatt - Zero Zero.mp3
/home/cash/CarAudio/covers/04Low - Transmission.mp3
/home/cash/CarAudio/covers/05Codeine - Atmosphere.mp3
/home/cash/CarAudio/covers/01 Summer Night City (Therion).mp3
/home/cash/CarAudio/covers/03 Gimme Gimme Gimme (Sinergy).mp3
/home/cash/CarAudio/covers/04 Money Money Money (At Vance).mp3
/home/cash/CarAudio/covers/05 Voulez-vouz (Morgana Lefay).mp3
/home/cash/CarAudio/covers/07 Take A Chance On Me (Rough Silk).mp3
/home/cash/CarAudio/covers/09 Eagle (Sargant Fury).mp3
/home/cash/CarAudio/covers/10 One Of Us (Flowing Tears).mp3
/home/cash/CarAudio/covers/11 Waterloo (Nation).mp3
/home/cash/CarAudio/covers/12 Super Trouper (Custard).mp3
/home/cash/CarAudio/covers/14 Dancing Queen (Glow).mp3
/home/cash/CarAudio/covers/07 Sign - Run to the Hills.mp3

De igual forma ponemos los covers con los nombres raros (estan en el directorio .kde/share/apps/amarok/albumcovers/large/ ) y los copiamod a un directorio, accesable por el script en este caso ( ../covers/ )

Instalamos los modulos perl necesarios
Image::Magick
MP3::Tag
Digest::MD5

Y aqui esta el script:

#!/usr/bin/perl

$configfile = "paths";
open(CFG_FILE, $configfile) or die "Can not open file, $!";

while () {
        push @ips, $_;
}
close (CFG_FILE) or die "Can not close file correctly";


use Image::Magick;
use MP3::Tag;
use Digest::MD5  qw(md5_hex);

foreach my $raya (@ips) {
        chomp($raya);
        #print "$raya\n";
        $filename = $raya;
        $mp3 = MP3::Tag->new($filename);
        $mp3->config('write_v24',1);
        #$mp3->config("write_v24");
        $mp3->get_tags();
        if (exists $mp3->{ID3v1}) {
                #print "Filename: $filename\n";
                $artist=lc($mp3->{ID3v1}->artist);
                $album=lc($mp3->{ID3v1}->album);
                #print "-$artist-$album-\n";
        }
        my $imagename = md5_hex( $artist.$album );
#       print $imagename;
        if ( -e "../covers/$imagename") {
                print "../covers/$imagename\n";
                use constant APIC => "APIC";
                use constant TYPE => "jpg";
                use constant HEADER => ( chr(0x0) , "image/" . TYPE , chr(0x3), "Cover Image");
                use constant DEBUG => 1;
                my $image = new Image::Magick;
                if (my $x = $image->Read("../covers/$imagename")) {
                      print "Couldn't read the image $imagefile: $x\n";
                }
        #}
        my $imagedata = $image->ImageToBlob(magick => TYPE );
        undef $image;

        my $id3;

    my $id3;
    if (exists $mp3->{ID3v2}) {
        print "Using old ID3v2 tag\n" if DEBUG;
        $id3 = $mp3->{ID3v2};
    } else {
        print "Creating new ID3v2 tag\n" if DEBUG;
        $id3 = $mp3->new_tag("ID3v2");
    }

    my $frames = $id3->supported_frames();
    if (!exists $frames->{APIC}) {
        print "Something is wrong, APIC is not a supported frame!\n";
        exit 2;
    }

    my $frameids = $id3->get_frame_ids();
    if (exists $$frameids{APIC}) {
        print "Replacing existing APIC entry\n" if DEBUG;
        $id3->change_frame(APIC, HEADER, $imagedata);
    } else {
        print "Creating new APIC entry\n" if DEBUG;
        $id3->add_frame(APIC,HEADER, $imagedata);
    }

    $id3->write_tag();

}
        $mp3->close();

print "done $raya \n";
#sleep 5;
}

CASH: Ches frikis, como se complican, por eso se van a ir al infierno

INESITA: No te enojes cashito de mi vida… aun tenemos la esperanza que salga algun fork de la version anterior…

CASH: Itunes es el futuro, bueno, gracias, saludos a nuncavuelvas

INESITA: No!!!! pegame! pegame pero no me dejes!!! deje una cita con DOMINIC BARONET por venir contigo..

CASH: Sorry mija, tengo pendientes, luego t llamo bye

NOTA: La entravista se hizo via email a iness@hotmail.com, no se puede asegurar que fuera ines realmente

Como dice el apartado 5.777 del codigo de tatita escriva “la ociosidad es la madre de todos los vicios”… Este hecho irrefutable pone en evidencia la pecaminosidad de los sistemas libres… nuestro equipo de investigacion ha puesto al descubierto la ociosidad de los frikis linuxeros, este programa maligno en perl agarra la informacion y postea automaticamente en twitter que musica pecaminosa esta escuchando en el reproductor AMAROK y dependiendo del genero del tag del MP3 le pone comentarios y acciones..

#!/usr/bin/perl

use DCOP::Amarok::Player;
$player = DCOP::Amarok::Player->new();

my $comm="";
my $genero=$player->genre();
# Default action
my $action="Listenin 2 ";


if ($genero =~ /(a|u)eton/) {
        $action="GET A LIFE LOSER ";
}

if (($genero =~ /(M|m)etal/)||($genero =~ /(M|m)ETAL/)) {
        $action="Headbangin with ";
        $comm="\\m\/";
}

if ($genero =~ /(P|p)unk/) {
        $action="Pogo dancin with ";
}

if ($genero =~ /(S|s)ka/) {
        $action="Skankin with ";
}

if (($genero =~ /(6|7|8)0s/)||($genero =~ /(P|p)(O|o)(P|p)(6|7|8)0/)) {
        $action="Remembering with ";
}

if ($genero =~ /(h|H)ardcore/) {
        $action="Windmillin with ";
}

if ($genero =~ /(O|o)ther/) {
        $action="Cash, taguea bien loser: ";
}

if ($genero =~ /(A|a)lternativ/) {
        $action="Rockin with: ";
}

if (($genero =~ /popsp/)||($genero =~ /atin/)) {
        $action="Freseando with: ";
        $comm="(que gay)";
}

if ($genero =~ /(b|B)anda/) {
        $action="De caballitO with: ";
}


if ($genero =~ /ariachi/) {
        $action="F0lkloreando with: ";
}

my $artist=$player->artist();

if ($artist =~ /MAIDEN/) {
        $action="UP T FUCKN IRONS!: ";
}

my $twup = $action."\"".$player->title()."\" of ".$player->artist()." from \"".$player->album()."\" $comm (autopost powered by perl) ";
print "\n $twup \n";

$player->showOSD();
use Net::Twitter;

my $nt = Net::Twitter->new(
      traits   => [qw/API::REST/],
      username => "tuusernamedeltwitter",
      password => "tupassdeltwitter"
);

if ( length($player->title()) gt 1 ) {
        my $result = $nt->update($twup);
} else {
        print "me niego a postear con artista vacio";
}

Se instalo un sistema con linux que despues de la demostracion tiraremos a la basura pues se contamino con codigo pecaminoso… para correr el script

cash@influenza:~$ perl zamarok.pl
Headbangin with “Twist Of Cain” of Danzig from “Danzig” \m/ (autopost powered by perl)

Y he aqui la salida…

fb

Para hacer mas triste la ociocidad, lo ponen en el crontab para que se ejecute solo diariamente a cierta hora del dia y ponga en evidencia al pobre si lo agarran escuchando a musica metelera como Lucia Mendez o a New Kids on the block

Se le pregunto al friki, porque no uso switch en vez de tanto IF, y el devergonzado contesto: me dio hueva

Un nuevo modulo de Expect ha salido, este integra el protocolo SSH al expect-perl, para hacer un poco mas transparente la conexion y concentrar la programacion en las activodades en el shell ya conectado, sin complicarnos la vida en todas las validaciones de la conexion.

El autor del modulo es Bruno Negrao Guimaraes Zica.

#!/usr/bin/perl
use Net::SSH::Expect;

#
# You can do SSH authentication with user-password or without it.
#

# Making an ssh connection with user-password authentication
# 1) construct the object
my $ssh = Net::SSH::Expect->new (
host => "myserver.com",
password=> 'pass87word',
user => 'bnegrao',
raw_pty => 1
);

# 2) logon to the SSH server using those credentials.
# test the login output to make sure we had success
my $login_output = $ssh->login();
if ($login_output !~ /Welcome/) {
die "Login has failed. Login output was $login_output";
}

# - now you know you're logged in - #

# Starting ssh without password
# 1) run the constructor
my $ssh = Net::SSH::Expect->new (
host => "myserver.com",
user => 'bnegrao',
raw_pty => 1
);
# 2) now start the ssh process
$ssh->run_ssh() or die "SSH process couldn't start: $!";

# 3) you should be logged on now. Test if you received the remote prompt:
($ssh->read_all(2) =~ />\s*\z/) or die "where's the remote prompt?"

# - now you know you're logged in - #

Initial problem:

“I’m trying to use expect to automate the communications with a serial modem using cu, but i never got answer to thr AT commands from the modem .”

Code:

$rootexpect->expect($timeout, "nnected");
$rootexpect->send("AT\n");
$rootexpect->expect($timeout,"OK");
my $x;
$rootexpect->interact($x, 'XXX');

Here is the debug output (Looks like modem is not acepting the \n after AT)

spawn id(4): Does `\007Connected.\r\n'
match:
pattern #1: -ex `nnected'? YES!!
Before match string: `\007Co'
Match string: `nnected'
After match string: `.\r\n'
Matchlist: ()

spawn id(4): list of patterns:
#1: -ex `OK'

spawn id(4): Does `.\r\n'
match:
pattern #1: -ex `OK'? No.

spawn id(4): Does `.\r\n\nAT\n'
match:
pattern #1: -ex `OK'? No.

With the script @ interact mode AT responds fine

at
OK

I connected a cisco router’s console port (instead of the modem), changed the expect commands and the router successfully returns the output of the command ‘sh ver’…

The solution to the problem…

$rootexpect->exp_internal('2');
$rootexpect->expect($taim, "nnected");
$rootexpect->send("AT\015\012");
$rootexpect->expect($taim,"OK");
$rootexpect->send("ATDT 99999999\015\012");
my $x;
$rootexpect->interact($x, 'XXX');

Explanation:
(Taken from http://www.rocketaware.com/perl/perlfaq8/How_do_I_read_and_write_the_seri.htm )

Some devices will be expecting a “\r” at the end of each line rather than a “\n”. In some ports of perl, “\r” and “\n” are different from their usual (Unix) ASCII values of “\012” and “\015”. You may have to give the numeric values you want directly, using octal (“\015”), hex (“0x0D”), or as a control-character specification (“\cM”).

print DEV “atv1\012″; # wrong, for some devices
print DEV “atv1\015″; # right, for some devices

Even though with normal text files, a “\n” will do the trick, there is still no unified scheme for terminating a line that is portable between Unix, DOS/Win, and Macintosh, except to terminate ALL line ends with “\015\012”, and strip what you don’t need from the output. This applies especially to socket I/O and autoflushing,

Una demostracion del poderio del “voice recognition” de Windows vista aplicado a la programacion, noten la facilidad con la que se crea el codigo… por algo los piojosos linuxeros estan aterrados de la poca oportunidad de crecer que le dejaran productos tan buenos y estables….

spamhammerd – give spammers the meathammer in real time

Original project URL:

http://n0rp.chemlab.org/spamhammer

Original code: Steve j. Kondik (shade at chemlab.org)

this code will monitor a postfix log and watch for “550″ errors (user unknown). after a threshold is reached, the ip generating the excessive errors will be added to the block list. spammers are sloppy and generally tend to blast everyone on their list at the same time.

This is mostly useless unless used on a high-volume server.

My tiny modifications…

Modified Feb 2007
Changes: Selective parsing to for use with combined logs (A single logfile with postfix, amavis, SPF)
Changed error from “550″ to “450″
Changes on the arrays numbers to match log fields.
Tested on Slackware Linux.
Added iptables blocking.

Usage:
Apply the filter @ Postfix’s main.cf (spammers & spammers.db should be created by the script before reload postfix)
smtpd_client_restrictions = check_client_access hash:/etc/postfix/generated/spammers

Modified Code:

http://www.fathersfate.com.mx/wordpress/code/spamhammer.txt

Uno que es neofito para esto de la programacion y que va empezando en esto del perl, es util buscar las funciones disponibles para la instalacion de perl en el sistema, funciones en la instalacion de Perl como las que se accesan como modulos, para ello se cuenta con el programa perldoc, el cual corre en modo texto, muy parecido a lo que es el man para los comandos en unix/linux

En Ubuntu/Debian:

jhonny@cash:~$ sudo apt-get install perldoc

PERLDOC(1) User Contributed Perl Documentation PERLDOC(1)

NAME
perldoc - Look up Perl documentation in Pod format.

SYNOPSIS
perldoc [-h] [-v] [-t] [-u] [-m] [-l] [-F] [-i] [-V] [-T] [-r] [-ddes‐
tination_file] [-oformatname] [-MFormatterClassName] [-wformatterop‐
tion:value] [-nnroff-replacement] [-X] PageName|ModuleName|ProgramName

perldoc -f BuiltinFunction

perldoc -q FAQ Keyword

See below for more description of the switches.

Y si son amantes de que se vea en ventanita, esta el podbrowser

se instala en Ubuntu/Debian:

jhonny@cash:~$ sudo apt-get install podbrowser

Photobucket - Video and Image Hosting

Como veran muestra la funcion/modulo y al seleccionarla se puede navegar en la introduccion, metodos, uso y funciones similares o relacionadas.

Desde que empece a usar ubuntu, el VI le da la chiripiorca al pegar una linea con un # al principio, la siguiente linea indenta y le pone otro #, y asi para cada linea, de manera que si pegas un chingo de codigo se hace un desmadre…

                # shflash
                #                 $telnet->expect($timeout, "\#");
                #                                 $telnet->send(shflashn);
                #                                                 $telnet->expect($timeout, "\#");
                #                                                                 $shint = $telnet->before();
                #                                                                                 # shmemsum
                #                                                                                                 $telnet->expect($timeout, "\#");
                #

Coregirlo deshabilitando “auto indent” con:

:set paste
o
:h pt

en modo comando

                # shflash
                $telnet->expect($timeout, "\#");
                $telnet->send(shflashn);
                $telnet->expect($timeout, "\#");
                $shint = $telnet->before();

Hace un par de dias me di de topes, pues obteniendo un reporte de una serie de comandos show enviados a un cisco (R) el log que mandaba generar se mochaba….

El codigo:

#!/usr/bin/perl
use expect;

--snip
Parametros de conexion y creacion del objeto expect
--snip

               $telnet->log_file("$host.txt", "w");
               $telnet->send_slow(0, "ter le 0\n");
               $telnet->send_slow(0, "sh ver\n");
               $telnet->send_slow(0, "sh run\n");
               $telnet->send_slow(0, "sh diag\n");
               $telnet->send_slow(0, "sh flash\n");
               $telnet->send_slow(0, "sh ip int bri\n");
               $telnet->send_slow(0, "sh interfaces\n");
               $telnet->send_slow(0, "sh ip route\n");
               $telnet->send_slow(0, "sh dial-p voice sum\n");
               $telnet->send_slow(0, "sh processes memory\n");
               $telnet->send_slow(0, "sh processes cpu\n");
               $telnet->send_slow(0, "sh processes history\n");
               $telnet->send_slow(0, "q\n");
               $telnet->send_slow(0, "\n");
               $telnet->log_file(undef);

Estos comandos generan un log de 1400 y pico de lineas, pero el log llegaba hasta la 300, mi error (pendejada) fue no forzar al programa a esperar a que terminara el comando pa mandar el otro…, de manera que se necesita una orden expect() antes de mandar el siguiente comando, esto para cada uno de los comandos enviados, el log se mochaba al terminar el ultimo comando enviado.

Perl es la abreviación de “Practical Extraction and Report Language”. Es lo que se conoce como un lenguaje “script”, es decir, uno en el que no hace falta compilar el programa escrito o “script”. En la práctica se compila parcialmente al comienzo de su ejecución. Ha sido diseñado para “hacer las cosas fáciles fáciles y las cosas difíciles posibles”.

Algunas de las ventajas de Perl son:

* Es un buen lenguaje “pegamento”. Se pueden juntar varios programas de una forma sencilla para alcanzar una meta determinada. Los usuarios de Windows agradecerán esta propiedad ya que normalmente adolecen de un buen lenguaje tipo “script”.

* Es relativamente rápido para un lenguaje tipo “script”.

* Está disponible en múltiples plataformas y sistemas operativos. De hecho funciona bajo diferentes sabores de UNIX, Linux y todo tipo de Windows. Un programa que se escriba teniendo en cuenta la compatibilidad puede ser escrito en una plataforma y ejecutado en otra.

* El desarrollo de aplicaciones es muy rápido.

* Hay una colección enorme de módulos que pueden ser incorporados a cualquier “script” de Perl. Están disponibles en el CPAN (“Comprehensive Perl Archive Network”). En particular existe una extensión para cálculo numérico denominada PDL.

* Perl es gratuito. Mucho más que eso, es “Software Libre”. Esto quiere decir que el código fuente está disponible para que cualquiera lo pueda ver o modificar, y lo que es más importante, siempre lo estará. Aunque nunca pretendas cambiar el código, es importante disponer de la posibilidad de hacerlo, ya que siempre se podrá contratar a una tercera persona para que lo modifique en el caso de que haya un error, y debería ser posible solucionarlo.

* Le otorga al programador mucha libertad para que haga el programa como quiera. Tal como dice el eslogan de Perl “Hay más de una forma de hacerlo”.

Algunas de las desventajas de Perl son:

* Es lento para algunas aplicaciones, como programación a bajo nivel, escribiendo un “driver” para una aplicación o corriendo modelos numéricos de cálculo intensivo. Si bien se pueden insertar subrutinas FORTRAN o C en Perl, teniendo lo mejor de los dos mundos, pero con algo más de complejidad.

* La libertad que se le otorga al programador puede significar que el resultado sea un programa ilegible. Si no se escribe con cuidado puede llegar a ser difícil de leer. De hecho hay un concurso de Perl ofuscado.

* No se pueden compilar programas Perl. Aunque actualmente se está desarrollando un compilador que realice esta tarea y hay uno comercial disponible para la plataforma Windows. Este tema no es tan crítico como suena, los programas Perl no correrán mucho más rápidos cuando se compilen, la única ventaja está en la desaparición de la fase inicial de compilación al correr la aplicación.

* Utiliza muchos recursos de la máquina. Esto significa que no es tan ligero como un programa en C, pero en la práctica es ligero comparado con la potencia de computación de los ordenadores actuales.

Muchos amigos me sacan curas de que me gusta complicarme la vida, que era un masoquista por estar programando en perl, la ventaja que me llevo (y aun me tiene) en Perl es la de los modulos de CPAN, gracias a ellos me ha sacado de bastantes broncas y me ha permitido automatizar bastantes chingaderas: Conexiones de red automatizadas con expect, lectura de archivos de excel, lectura de dbf’s etc, quiza lo haya en otros lenguajes, pero he hallado mas documentacion en perl.

Texto original de TLDP aqui

Un CGI es un programa que se corre en un servidor web, ya estan pasadones de moda, pero en veces es necesario ejecutar algunos scriptines de perl ya hechos en una pagina para hacer cosas sencillas. Hay de varios tipos, en este post mugroso veremos como preparar a un apache webserver para correr scripts de perl desde un navegador (Use Firefox)…

Se instala apache (pa tener donde correrlo)

sudo apt-get install apache2

Se instala el modperl, que es “la interface” entre el perl y el gueb server

sudo apt-get install libapache2-mod-perl2

Nos vamos al directotio donde se guardan los scripts cgis

cd /usr/lib/cgi-bin

Creamos nuestro primer cgi en perl (test.pl) con lo siguiente..


#!/usr/bin/perl
# Lo anterior se llama shabang, indica cual sera el interprete
print "Content-type:text/html\n\n";
# Se le da informacion al navegador del tipo de documento que es (Un HTML)
print "hello luser\n";
# Envia el texto "hello luser"

Weno, ya tienes tu cgi, ora se le dan permisos de ejecucion y se le cambia de dueño

sudo chown www-data test.pl
sudo chmod 700 test.pl

y lo corremos: la url sera

http://elurldelsitioenelquepusisteestamadre.com/cgi-bin/test.pl

Che programita complejo que creamos dira: hello luser :D

Pues ha seguido con los pininos en las expresiones regulares en perl, cuando buscaba una expresion regular tenia que estar a prueba y error hasta que diera lo esperado, y pues hasta ahora me voy dando cuenta de estas herramientas:


Visual Regex
Photobucket - Video and Image Hosting
Regex Coach
Photobucket - Video and Image Hosting

En lo personal se me hizo mejor regex coach, aunque ambas sacan del apuro,a ambas muestran lo que se esta seleccionando con la expresion regular que se esta creando cambiando de colores el texto sobre cual se aplicara.

En veces me ha sido necesario manipular un archivo por decir archivo.zip y crear otro archivo con el mismo nombre (archivo.exp) pero con diferente extension, bueno, tons hay que separar la extension anterior para poder
ponerle la nueva.

#
# remove file extension
#
$fname="archivo.txt"
print $fname; #Devolvera archivo.txt
$fname =~ s/\..*//;
print $fname; #Devolvera archivo