Perl vraagje

Pagina: 1
Acties:

  • Slagroom
  • Registratie: Juni 2001
  • Laatst online: 23-08 10:29
Ik ben bezig met een soort van shopping achtig veiling systeem te maken. Er worden hier veel verschillende e-mailtjes verstuurd en daarom had ik hier voor in php een functie geschreven. Nu wil ik ook een cron job gaan maken die ik schrijf in perl. Nu ben ik nog niet zo bekend in perl maar omdat de inhoud van de mailtjes vaak gewijzigd wordt moeten de mailtjes wel eenvoudig te veranderen zijn. De php functie leest de mailtjes uit een tekst bestand. Deze mailtje bevatten variablenen die je zelf kunt aan maken door ze in de array te zetten die je als argument geeft bij de functie makeMail. Nu was mijn vraag, hoe schijf ik zo'n functie in perl. Ik vraag niet om alles voor te kauwen maar om een zetje in de goede richting. En ik heb gezocht... maar ik zit mer ereg_replace en de file functies...

Dit is email.txt:
code:
1
2
3
4
5
Hallo [naam],

Dit zijn jouw adres gegevens:
[adres]
[postcode] [plaats]


Dit is het php gedeelte:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?
function MakeMail($what) {
    global $siteroot;
    $fp = fopen($rootdir.'conf/'.$what['what'], 'r');
    while($line = fgets($fp, 4096))
        $message .= $line;
    foreach($what AS $a => $b)
        $message = eregi_replace("\\[$a\]", $b, $message);
    return $message;
}

$email_arr = array();
$email_arr['naam'] = 'Slagroom';
$email_arr['adres'] = 'Kalferlaan 2';
$email_arr['postcode'] = '6232 HH';
$email_arr['plaats'] = 'Blaat';
$email_arr['what'] = 'email.txt';
$overboden_message = MakeMail($email_arr);
mail($email_over, 'Uw bod op '.$out_get['naam'].' is overboden', $overboden_message, "From: $beheerder_email <Dressingroom>");
?>


Kan iemand mij wegwijs maken?

Verwijderd

Waarom heet dit topic Perl vraag, als het eigenlijk een PHP vraag is?

Verwijderd

Hij wil dit omzetten naar iets in perl !?

Verwijderd

Verwijderd schreef op 27 oktober 2002 @ 19:17:
Hij wil dit omzetten naar iets in perl !?
Doh! Fout gelezen |:(

  • Slagroom
  • Registratie: Juni 2001
  • Laatst online: 23-08 10:29
Maar weten jullie hoe ik daarmee werk?

  • Slagroom
  • Registratie: Juni 2001
  • Laatst online: 23-08 10:29
Ik zit nu de perldocs door te lezen... maar ik snap de replaces niet... hoe maak ik nou deze functie in php:
PHP:
1
2
foreach($what AS $a => $b)
    $message = eregi_replace("\\[$a\]", $b, $message);


alstublieft?

  • maartenba
  • Registratie: November 2001
  • Laatst online: 29-08 17:05
al effe geleden maar i'll give it a go:
code:
1
$message =~ s/\\[$a\]/$b/g;

  • Slagroom
  • Registratie: Juni 2001
  • Laatst online: 23-08 10:29
maartenba schreef op 27 oktober 2002 @ 21:33:
al effe geleden maar i'll give it a go:
code:
1
$message =~ s/\\[$a\]/$b/g;
Hee, vet! Dus met =~ geef ik een regexp aan? Zo makkelijk? Ik zal ook even de de perldocs erbij doornemen. Leuk dat Perl!

  • maartenba
  • Registratie: November 2001
  • Laatst online: 29-08 17:05
Yep is inderdaad gigantisch :)
Ook in een if:
code:
1
2
3
if ($var =~/\n/) {
  print "Newline found !";
}


En dan alle regexp stuff zoals g,i, ... (ignore case etc.) moet je maar effe op Googlen

  • muba
  • Registratie: April 2002
  • Laatst online: 19-10-2013

muba

Prince of Persia!

Slagroom schreef op 27 oktober 2002 @ 22:58:
[...]

Hee, vet! Dus met =~ geef ik een regexp aan? Zo makkelijk? Ik zal ook even de de perldocs erbij doornemen. Leuk dat Perl!
welcome to perl!

Reporter: Mister Gandhi, what do you think of western civilisation?
Gandhi: I think it would be a good idea


  • Slagroom
  • Registratie: Juni 2001
  • Laatst online: 23-08 10:29
Ik heb nu dit script:
Perl:
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
#!/usr/bin/perl

use DBI;

$error_occured = 0;

$db_host = 'localhost';
$db_user = '******';
$db_pass = '******';
$db_name = 'blaat';
$pasmail = 'blaat';
$onderwerp = 'Gefeliciteerd met uw product!';

$sendmail = '/usr/sbin/sendmail';

($sec,$min,$hour,$day,$month,$year,$day2) = (localtime(time))[0,1,2,3,4,5,6];
$year += "1900";

$month++;

open (FH ,">> /home/sites/********/perl/log/$month-$year.log");

$dbh = DBI->connect('dbi:mysql:'.$db_name.':'.$db_host,$db_user,$db_pass) or Ins_Log($dbh->errstr,'error');

sub Ins_Log {

    my ($error,$type) = @_;

    $date = `/bin/date`;
    chop($date);

    print FH $date." : ".$error."\n";

    if($type eq 'error') {
        $error_occured = 1;
    }

}

$datum = "$year-$month-$day $hour:$min:$sec";

$sth = $dbh->prepare("SELECT producten.*, categorieen.*, merken.*, assortiment.* FROM producten "
            ."LEFT JOIN categorieen ON producten.cat_id = categorieen.cat_id "
            ."LEFT JOIN merken ON merken.merk_id = categorieen.merk_id "
            ."LEFT JOIN assortiment ON assortiment.as_id = categorieen.as_id "
            ."WHERE producten.open = '1'");
$sth->execute or Ins_Log($sth->errstr,'error');

while (@data = $sth->fetchrow_array()) {
    print $data[0]."\n".$data[1]."\n".$data[2]."\n--------------------\n";
}

close FH;


Maar die kan ik alleen uitvoeren met dit commando:
/usr/bin/perl ./script.pl

De foutmelding is dit:
[ikke perl]# ./script.pl
sh: ./script.pl: No such file or directory
[ikke perl]#

terwijl er bovenin duidelijk #!/usr/bin/perl staat en ik het script gechmod heb... hoe kan dit?

Verwijderd

Staat perl wel in /usr/bin?

Uhm.... :)

  • Slagroom
  • Registratie: Juni 2001
  • Laatst online: 23-08 10:29
Verwijderd schreef op 29 oktober 2002 @ 14:28:
Staat perl wel in /usr/bin?

Uhm.... :)
:) Ja

  • skiwi
  • Registratie: Februari 2001
  • Laatst online: 05-04 14:13
Uhm, ik neem aan dat je een chmod over je script.pl hebt gedraaid zodat het executable is?

edit:
skiwi is blind: ik het script gechmod heb...

  • Slagroom
  • Registratie: Juni 2001
  • Laatst online: 23-08 10:29
skiwi schreef op 29 oktober 2002 @ 14:33:
Uhm, ik neem aan dat je een chmod over je script.pl hebt gedraaid zodat het executable is?
Slagroom schreef op 29 oktober 2002 @ 14:23:
terwijl er bovenin duidelijk #!/usr/bin/perl staat en ik het script gechmod heb... hoe kan dit?
...yep, heb ik gedaan
-rwxr-xr-x 1 ikke users 1343 Oct 29 13:59 script.pl

  • skiwi
  • Registratie: Februari 2001
  • Laatst online: 05-04 14:13
En als je eens een lekker simpele 'hallo wereld' applicatie bouwt?
code:
1
2
#!/usr/bin/perl
printf "Hallo Wereld\n";

  • odysseus
  • Registratie: Augustus 2000
  • Laatst online: 21:47

odysseus

Debian GNU/Linux Sid

(jarig!)
Staat die #!/usr/bin/perl wel op de *eerste* regel? De shell vindt het niet leuk als hij daar niets vindt :).
maartenba schreef op 28 oktober 2002 @ 10:15:
Yep is inderdaad gigantisch :)
Ook in een if:
code:
1
2
3
if ($var =~/\n/) {
  print "Newline found !";
}


En dan alle regexp stuff zoals g,i, ... (ignore case etc.) moet je maar effe op Googlen
Nog leuker:
code:
1
print "Newline found!" if ($var =~ /\n/);

Leven is het meervoud van lef | In order to make an apple pie from scratch, you must first create the universe.


  • Sjaaky
  • Registratie: Oktober 2000
  • Laatst online: 22-08 16:45
Je zit zeker te editten in windows?
Dan staan je regeleindes verkeerd en moet je die omzetten naar Unix regeleindes, de meeste behoorlijke editors kunnen dat wel.

  • Slagroom
  • Registratie: Juni 2001
  • Laatst online: 23-08 10:29
odysseus schreef op 29 oktober 2002 @ 15:29:
Staat die #!/usr/bin/perl wel op de *eerste* regel? De shell vindt het niet leuk als hij daar niets vindt :).


[...]

Nog leuker:
code:
1
print "Newline found!" if ($var =~ /\n/);
Yep, staat op de eerste regel...

  • Slagroom
  • Registratie: Juni 2001
  • Laatst online: 23-08 10:29
Sjaaky schreef op 29 oktober 2002 @ 15:42:
Je zit zeker te editten in windows?
Dan staan je regeleindes verkeerd en moet je die omzetten naar Unix regeleindes, de meeste behoorlijke editors kunnen dat wel.
Heej! Dit was het! Bedankt man!

  • Slagroom
  • Registratie: Juni 2001
  • Laatst online: 23-08 10:29
Nu had ik ook nog een vraagje over perl icm mysql. Hoe kan ik (zonder gebruik te maken van een loop), gegevens uit een row trekken dat een result is van een query waar zowieso maar één row uitkomt?

zoiets als:

PHP:
1
2
$res = mysql_query("SELECT * FROM table LIMIT 0,1");
$field1 = mysql_result($res, 0, 'field1');

  • Slagroom
  • Registratie: Juni 2001
  • Laatst online: 23-08 10:29
even een schopje voor de bovenste vraag. sorry...

  • _DeWie_
  • Registratie: November 2001
  • Laatst online: 10-04 16:23
USE DBI;

  • Slagroom
  • Registratie: Juni 2001
  • Laatst online: 23-08 10:29
die gebruik ik al... maar is er een functie in DBI die een soortgelijke uitwerking heeft?

  • odysseus
  • Registratie: Augustus 2000
  • Laatst online: 21:47

odysseus

Debian GNU/Linux Sid

(jarig!)
Misschien iets als het volgende, hoewel dat niet echt netjes is?
code:
1
($mijn_var, @dump) = $sth->fetchrow_array;

Netter is de volgende methode:
code:
1
$ary_ref  = $sth->fetchall_arrayref( $slice, $max_rows );

Leven is het meervoud van lef | In order to make an apple pie from scratch, you must first create the universe.


  • maartenba
  • Registratie: November 2001
  • Laatst online: 29-08 17:05
Check http://search.cpan.org effe, daar staan alle modules en docs...

  • Slagroom
  • Registratie: Juni 2001
  • Laatst online: 23-08 10:29
odysseus schreef op 29 oktober 2002 @ 18:10:
Misschien iets als het volgende, hoewel dat niet echt netjes is?
code:
1
($mijn_var, @dump) = $sth->fetchrow_array;

Netter is de volgende methode:
code:
1
$ary_ref  = $sth->fetchall_arrayref( $slice, $max_rows );
Hoe stop ik hiermee dan de waarde uit het veld 'naam' o.i.d. in de variabele $naam?

  • odysseus
  • Registratie: Augustus 2000
  • Laatst online: 21:47

odysseus

Debian GNU/Linux Sid

(jarig!)
Als je het kolomnummer niet weet dan kun je beter met een hashref werken. Als je niet weet hoe je een item in een referentie kunt aanspreken, dan moet je even de manpages van perlref en perlreftut lezen :).

Leven is het meervoud van lef | In order to make an apple pie from scratch, you must first create the universe.


  • Slagroom
  • Registratie: Juni 2001
  • Laatst online: 23-08 10:29
odysseus schreef op 29 oktober 2002 @ 20:24:
Als je het kolomnummer niet weet dan kun je beter met een hashref werken. Als je niet weet hoe je een item in een referentie kunt aanspreken, dan moet je even de manpages van perlref en perlreftut lezen :).
Ik heb hem nu, maar wat houdt die mijn var nou eigenlijk in?

  • odysseus
  • Registratie: Augustus 2000
  • Laatst online: 21:47

odysseus

Debian GNU/Linux Sid

(jarig!)
Je bedoelt bij mijn eerste voorbeeld? Dat vist gewoon de eerste waarde uit de eerste teruggegeven rij uit de query en gooit de rest in een array met de naam @dump.

Leven is het meervoud van lef | In order to make an apple pie from scratch, you must first create the universe.


  • Red Sonja
  • Registratie: Juli 2001
  • Laatst online: 01-07 13:16

Red Sonja

Linux: power to de wortel

K kom er een beetje laat mee maar, ik heb erg veel aan deze link gehad:
http://www.perldoc.com/cpan/Msql.html

And the beast shall be made legion. Its numbers shall be increased a thousand thousand fold. The din of a million keyboards like unto a great storm shall cover the earth, and the followers of Mammon shall tremble. from The Book of Mozilla, 3:31

Pagina: 1