Köszi a gyors választ, valóban ez a gond!
Sajnos én nem vagyok egy perl mester, de egy lehetséges megoldás:
use File::Basename;
$lfile = fileparse($basefile,'\..*') . ".o";
Ehhez viszont be kell húzni, a File:Basename osztályt, vagy mit (nem tudom mi van perl-ben... :) ). Lehet kicsit overkill, szóval ha valaki tud egy egysoros regexp-es megoldást, az ne habozzon. Mondjuk ez azért jó mert a perl saját kódja és biztos működik minden esetben, minden oprendszer alatt.
Amúgy a beépített parser alapján:
$lfile = ($basefile =~ s!^.*/([^/]*)$!\1!);
Ezzel annyi a baj, hogy a fájl nevet kiterjesztéssel adja vissza és hogy az eredményt nem az $lfile-ba pakolja, hanem kicseréli a $basefile értékét. Gondolom ez az s operátor miatt van. De nem tudtam átírni, úgy, hogy csak a fájl nevét adja vissza kiterjesztés nélkül és az értéket az $lfile-ba írja, mert ha az s-t kitörlöm az elejéről syntax error-t kapok.
Nem foglalkoztam a dologgal sokat, csak keresni akartam egy működő megoldást.