zui > edb.programmering.* > edb.programmering.perl

Morten P (19.12.2009, 02:20)
Jeg har et program som kører som en dæmon der bliver startet fra init.d
(Det kan sende og modtage sms fra et modem)

Selve programmet ligger i /usr/sbin/gsm_server

For at programmet bliver overskueligt at vedligeholde har jeg splittet dele
af det op i under-moduler.

Men hvor skal disse placeres?

Jeg ser umiddelbart to muligheder:

1)
/usr/share/perl5/GSM/Server/Send_SMS.pm
/usr/share/perl5/GSM/Server/Receive_SMS.pm

2)
/usr/share/gsm_server/Send_SMS.pm
/usr/share/gsm_server/Receive_SMS.pm

Den første er ret lækker for /usr/share/perl5 er med i Perls søgesti og jeg
kan kalde modulerne med

my $send = new GSM::Server::Send_SMS;

mens den anden kræver lit 'use lib' sjov.

Omvendt er modulerne jo meget specifikke og kun anvendbare for programmet
'gsm_server' så måske det er helt galt at smide dem i '/usr/share/perl5'?

Hjælp, guide og best-practice ønskes :-)
Flemming Frandsen (20.12.2009, 11:23)
Morten P wrote:
> mens den anden kræver lit 'use lib' sjov.


Jeg ville helt klart smide modulerne sammen med programmet, evt. i et pm
subdir, tricket med at finde modulerne ordnes så ved:

....
use FindBin qw($Bin);
use lib "$Bin/pm";
use LokaltHejs;
Morten P (20.12.2009, 11:54)
"Flemming Frandsen" <ff-news> wrote in message
news:db0f
> Morten P wrote:
>> mens den anden kræver lit 'use lib' sjov.

> Jeg ville helt klart smide modulerne sammen med programmet, evt. i et pm
> subdir, tricket med at finde modulerne ordnes så ved:


Dvs ned i /usr/share/sbin/PM/*.pm ?

Det er vel også det "reneste" men troede ikke jeg "bare" kunne hælde
programspecifikke ting ned i sbin...
Peter Makholm (20.12.2009, 12:34)
"Morten P" <spam> writes:

> Jeg har et program som kører som en dæmon der bliver startet fra init.d
> (Det kan sende og modtage sms fra et modem)


Jeg ville absolut lave en CPAN-lignende pakke med dit program, enten
med Module::Build eller ExtUtils::MakeMaker. Så vil du få en Build.PL
eller Makefile.PL der gør det rigtige.

> Omvendt er modulerne jo meget specifikke og kun anvendbare for programmet
> 'gsm_server' så måske det er helt galt at smide dem i '/usr/share/perl5'?


Jeg ville lægge dine moduler ned under App::GSM_Server::*. Alt det
kode du ikke har tænkt dig at lægge i moduler ville jeg placerer i
App::GSM_Server, eventuelt i en run-funktion.

Selve "scriptet" vil så bare bestå af to linjer der siger:

use App::GSM_Server;
App::GSM_Server->run();

Lidt ala

//Makholm
Peter Makholm (20.12.2009, 12:48)
Peter Makholm <peter> writes:

> Selve "scriptet" vil så bare bestå af to linjer der siger:
> use App::GSM_Server;
> App::GSM_Server->run();
> Lidt ala


Ved nærmere eftertanke måske ikke et helt godt eksempel fordi jeg også
leger lidt rundt med Any::Moose. Men ideen er simpelt at have

package App::Bulkmail;

use Carp;

sub new {
my ($class, %args) = @_;

unless (keys %args) {
require Getopt::Long;
Getopt::Long::GetOptions( \%args,
"foo=s", "bar=i"
) or croak(...);
}

return bless \%args, $class;
}

sub run {
my $self = shift;

unless (blessed $self) {
$self = $self->new( @_ );
}

...
}

1;
Lignende emner