Thread Arbeitsspeicherproblem in Perl lösen
(17 answers)
Opened by
soezkan
at 2008-01-26 15:13
User since 2008-01-24
17
Artikel
BenutzerIn
Mit der folgenden Funktion binde ich das Perl in mein PHP-Skript ein:
function sunmoonriseset($lon, $lat, $tz, $year, $month, $day, $lang) { return @exec("perl c:/apache/xampp/cgi-bin/sunmoon.pl lon=".$lon." lat=".$lat." tz=".$tz." year=".$year." month=".$month." day=".$day); }
Alles was das PHP macht, ist den Wert der da rauskommt in ein CSV zu schreiben.
Sonst passiert nicht viel. Ich benutze Windows XP als Betriebssystem und ich
lasse mir jede bearbeitete Zeile per print(...) ausgeben: liegts vielleicht auch daran?
Vielen Dank!
Soezkan
ps:
hier das perl, in das die Indian.pm eingebunden wird:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
use strict; use Date::Indian; use POSIX qw(ceil floor); use Math::Round;
my(%FORM, $pair, $value, $name); # Hash FORM wird initialisiert
foreach $pair (@ARGV) { ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $FORM{$name} = $value; }
@ARGV = ();
my $date = Date::Indian->new( ymd => sprintf("%s-%s-%s",$FORM{'year'},$FORM{'month'},$FORM{'day'}), # ex: ymd => '2003-10-31' tz => sprintf("%s",dec2timezone($FORM{'tz'})), # ex: tz => '-5:30' locn => sprintf("%sE %sN",$FORM{'lat'},$FORM{'long'}) # ex: locn =>'82:30E 17:25N' );
my (@y, $m, $d, $t ) = $date -> ymd();
my ($moonrise, $moonset, $flag) = $date -> moonriseset(); my ($sunrise, $sunset, $flag) = $date -> sunriseset();
$moonrise = dec2hour_minute($moonrise); $moonset = dec2hour_minute($moonset);
$sunrise = dec2hour_minute($sunrise); $sunset = dec2hour_minute($sunset);
printf "MA $moonrise, MU $moonset|SA $sunrise, SU $sunset";
sub dec2time { my ($Dec,$Hour,$m,$Minute,$s,$Second);
$Hour = floor($_[0]); $m = $_[0] - $Hour; $Minute = floor($m*60); $s = ($m*60) - $Minute; $Second = floor($s*60);
if($Hour < 10) { $Hour = sprintf("0%s",$Hour); } if($Minute < 10) { $Minute = sprintf("0%s",$Minute); } if($Second < 10) { $Second = sprintf("0%s",$Second); }
return $Hour.":".$Minute.":".$Second; }
sub dec2hour_minute { my ($Dec,$Hour,$m,$Minute,$s,$Second); $Hour = floor($_[0]); $m = $_[0] - $Hour; $Minute = round($m*60);
if($Hour < 10) { $Hour = sprintf("0%s",$Hour); } if($Minute < 10) { $Minute = sprintf("0%s",$Minute); }
return $Hour.":".$Minute; }
sub dec2timezone { my ($Dec,$Hour,$m,$Minute,$s,$Second,$minus);
if($_[0] < 0) { $Hour = floor(abs($_[0])); $m = abs($_[0]) - $Hour; $minus = -1; } else { $Hour = floor($_[0]); $m = $_[0] - $Hour; $minus = 1; }
$Minute = round($m*60);
if($Minute < 10) { $Minute = sprintf("0%s",$Minute); }
$Hour = $minus * $Hour;
return $Hour.":".$Minute; }
View full thread Arbeitsspeicherproblem in Perl lösen
|