#!/usr/bin/perl use File::Basename qw(fileparse fileparse_set_fstype); use autodie qw(open close); $fn = shift; my $type = fileparse_set_fstype(); # save old type fileparse_set_fstype("Unix") unless $type eq "Unix"; # set to unix type my @T = fileparse($fn,'\.[^\.]*$'); #base, path, ext fileparse_set_fstype($type) unless $type eq "Unix"; # restore $filebase = $T[1] . $T[0]; $filename = $filebase . '.main'; open(FI,'<', $fn); open(FO,'>', $filename); while(){ if(/^sub (\w+)/){ close(FO); $filename = $filebase . '.'. $1; open(FO,'>', $filename); print FO "\n" . $_; }elsif(/^}$/ && $filename ne $filebase . '.main'){ print FO $_; close(FO); $filename = $filebase . '.main'; open(FO,'>>', $filename); }else{ print FO $_; } }