Schrift
[thread]7049[/thread]

Schon verwendetes Modul neu laden

Leser: 2


<< |< 1 2 >| >> 11 Einträge, 2 Seiten
Crian
 2005-06-14 17:29
#55484 #55484
User since
2003-08-04
5871 Artikel
ModeratorIn
[Homepage]
user image
Gibt es eine Möglichkeit, in einem Perlprogramm ein Modul, das bereits per use eingebunden wurde, zu einem späteren Zeitpunkt neu zu laden, so dass die veränderte Funktionalität im laufenden Programm zur Verfügung steht?\n\n

<!--EDIT|Crian|1118755768-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
esskar
 2005-06-14 18:29
#55485 #55485
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
jep

uhu.pl
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/usr/bin/perl

use strict;
use warnings;

while(1) {
{
no warnings;
do "Uhu.pm";
}

print Uhu::uhu(),"\n";

sleep(1);
}


Uhu.pm
Code: (dl )
1
2
3
4
5
6
7
8
9
package Uhu;

use strict;

sub uhu {
"uhu2";
}

1;


du solltest darauf achten, dass Uhu.pm nicht "use warnings" benutzt; sonst gibts ein warning.

wenn du jetzt den returnwert von Uhu::uhu änderst, ändert sich auch die ausgabe
kabel
 2005-06-14 19:52
#55486 #55486
User since
2003-08-04
704 Artikel
BenutzerIn
[default_avatar]
[quote=Crian,14.06.2005, 15:29]Gibt es eine Möglichkeit, in einem Perlprogramm ein Modul, das bereits per use eingebunden wurde, zu einem späteren Zeitpunkt neu zu laden, so dass die veränderte Funktionalität im laufenden Programm zur Verfügung steht?[/quote]
muss das sein? sowas ist IMO gar nicht schön.
-- stefan
sri
 2005-06-14 21:41
#55487 #55487
User since
2004-01-29
828 Artikel
BenutzerIn
[Homepage] [default_avatar]
Code: (dl )
1
2
3
require Foo::Bar;
delete $INC{Foo/Bar.pm};
require Foo::Bar;


perldoc Module::Refresh\n\n

<!--EDIT|sri|1118771246-->
betterworld
 2005-06-14 21:57
#55488 #55488
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
[quote=kabel,14.06.2005, 17:52]muss das sein? sowas ist IMO gar nicht schön.[/quote]
Ich finde das eigentlich ganz praktisch, dass so etwas in Perl geht. So kann man zum Beispiel am Quelltext herumeditieren, während das Programm schon laeuft, und dann den Quelltext nachladen. Bei manchen Projekten ist das fuer mich der Hauptgrund gewesen, eine Scriptsprache zu benutzen.

Ich mache es meist so:
Code: (dl )
do $INC{Foo/Bar.pm}
kabel
 2005-06-14 23:38
#55489 #55489
User since
2003-08-04
704 Artikel
BenutzerIn
[default_avatar]
:0
-- stefan
esskar
 2005-06-15 02:03
#55490 #55490
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=kabel,14.06.2005, 17:52]muss das sein? sowas ist IMO gar nicht schön.[/quote]
sowas ist doch für mod_perl ganz praktisch...
wenn die .pm sich ändert, einfach nachladen!
kabel
 2005-06-15 11:45
#55491 #55491
User since
2003-08-04
704 Artikel
BenutzerIn
[default_avatar]
*grummel* soweit hab ich natürlich nicht gedacht :-/
ok, bin offiziell überzeugt ;)
-- stefan
Taulmarill
 2005-06-15 12:43
#55492 #55492
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
für mod_perl gibt's da apache::reload analog zu dem von sri schon vorgeschlagenen module::refresh. die beiden module dürften wesendlich sauberer gelöst sein als der o.g. snippet.
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
Crian
 2005-06-15 13:27
#55493 #55493
User since
2003-08-04
5871 Artikel
ModeratorIn
[Homepage]
user image
Ah, sehr cool.

CPAN: Module::Refresh liest sich gut, ich werd das gleich mal installieren.

Das gibts allerdings nicht als PPM-Modul für ActiveSate, dort ist nur ein Module::Reload vorhanden. Hmmm\n\n

<!--EDIT|Crian|1118827983-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
<< |< 1 2 >| >> 11 Einträge, 2 Seiten



View all threads created 2005-06-14 17:29.