Gerir Cron's com o Perl

Bem pessoal aqui fica um pequeno script para vos ajudar a a automatizar as vossas tarefas quando tiverem que mexer em crontabs.Este script surgiu numa aula de Sistemas Operativos em que tínhamos um exercício em que tínhamos que adicionar novos crons com o script. Mas para não limitar o script acrescentei mais umas funções.Tais como tornar a criação de um novo cron mais interactiva , apagar crons , gravar o cron na localização correcta consoante o utilizador que está a executar o script.

#!/usr/bin/perl
#Developed by : Rubem Mota
#Dont use to earn money and keep all copyrights reserved to me
#Twitter: @rubemlrm
package SysAdmin;
use warnings;
use strict;
use autodie;
#declaração de variáveis
my $min ;
my $horas ;
my $dia;
my $mes;
my $diasemana;
my $uid = `id -u`;
my $opt;
my $comando;
my $user;
my $val;
#funções a ser chamadas
&Main();
#funções
sub Main(){
    print "Bem vindo a área de gestõa crontabn";
    print "Se deseja eliminar um cron pressione tecla Dn";
    print "se deseja adicionar um cron pressiona a tecla An";
    chomp($opt = );
    if ( $opt eq "D"){
        &Eliminar();
    }elsif($opt eq "A"){
        &Adicionar();
    }else{
        print "Opção inválida";
    }
}
sub Eliminar{
    if ($uid != 0){
        &User();
        system("nano /var/spool/cron/crontabs/$user");
        system("sleep 2");
        print "Processo Concluido.A retornar para o menu inicialn";
        system ("sleep 2");
        &Main();
    }else{
        system("nano /etc/crontab");
        system("sleep 2");
        print "Processo Concluido.A retornar para o menu inicialn";
        system ("sleep 2");
        &Main();
    }
}
sub Adicionar{
    &Minutos();
    &Horas();
    &Dia();
    &Mes();
    &DiaSemana();
    &Comando();
    &Final();
}
sub Minutos{
    print "Introduza os parametros de agendamenton";
    print "Introduza os minutosn";
    print ("Se desejar que o script seja executado em todos os minutos - pressione an");
    print ("Se desejar especificar o minuto - pressione c n");
    chomp($opt = );
    if ($opt eq "a"){
        $min = "*";
    }elsif($opt eq "c"){
        &Validar();
        $min=$val;
    }else{
        print "opção inválidan";
        system("clear");
        &Minutos();
    }
}
sub Horas{
    print "Introduza as horasn";
    print ("Se desejar que o script seja executado em todos as horas - pressione an");
    print("Se desejar especificar as horas - pressione c n") ;
    chomp($opt = );
    if ($opt eq "a"){
        $horas = "*";
    }elsif($opt eq "c"){
        &Validar();
        $horas = $val;
    }else{
        system("clear");
        print "opção inválidan";
        &Horas;
    }
}
sub Dia{
    print "Introduza os dian";
    print ("Se desejar que o script seja executado em todos os dias - pressione an");
    print ("Se desejar especificar o dia - pressione c n") ;
    chomp($opt = );
    if ($opt eq "a"){
        $dia = "*";
    }elsif($opt eq "c"){
        &Validar();
        $dia = $val;
    }else{
        print "opção inválidan";
        system("clear");
        &Dia();
    }
}
sub Mes{
    print "mesn";
    print ("Se desejar que o script seja executado todos os meses - pressione an");
    print (" Se desejar especificar o mes - pressione c n") ;
    chomp($opt = );
    if ($opt eq "a"){
        $mes = "*";
    }elsif($opt eq "c"){
        &Validar();
        $mes= $val;
    }else{
        print "opção inválidan";
        system("clear");
        &Mes();
    }
}
sub DiaSemana{
    print "Dia da Semann";
    print("Se desejar que o script seja executado todos os diass - pressione an");
    print("Se desejar especificar o dia - pressione c n") ;
    chomp($opt = );
    if ($opt eq "a"){
        $diasemana="*";
    }elsif($opt eq "c"){
        &Validar();
        $diasemana = $val;
    }else{
        print "opção inválidan";
        system("clear");
        &DiaSemana();
    }
}
sub Comando(){
    print ("Introduza o comando ou script a executarn");
    chomp(my $script = );
    $comando = $script;
}
sub User(){
    chomp($user = `whoami`);
}
sub ChUser(){
    print "Escolha o utilizador que vai executar o script/comandon";
    chomp($user = );
}
#funcoes de validação
sub Validar(){
    print "Introduza o valorn";
    chomp($val = );
    if ($val =~ /d,?/?-?/){
        print "Valor guardadon";
        system("clear");
    }else{
        &ErrorVal();
    }
}
sub ErrorVal(){
    print "Valor inválidon";
    print "Deseja sair ? se sim pressione Sn";
    print "Senão, se quiser voltar a repetir este passo pressione R";
    chomp($opt= );
    if($opt eq "S"){
        exit;
    }elsif($opt eq "R"){
        system("clear");
        &Validar();
    }else{
        print "Opção erradan";
        &ErrorVal();
    }
}
#função relativa a verificaçao do user id e sua respectiva config-
sub Final(){
    if ($uid != 0){
        &User();
        open(FILE, ">>/var/spool/cron/crontabs/$user");
        print FILE "$min $horas $mes $dia $diasemana $comandon";
        close(FILE);
    }else{
        &ChUser();
        open(FILE, ">>/etc/crontab");
        print FILE "$min $horas $mes $dia $diasemana $user $comandon";
        close(FILE);
    }
}