[megoldva] Perl subroutine and return

Sziasztok!

Ebben a scriptben van több hiba is (szerintem), nálam nem igazán akar működni. Ebből a scriptből használnám a switch-es menüválasztó részt egy másik scripthez, de nem működik.

Nálam így néz ki:
Pastebin

Amikor a menüben választok, csak a menüt kapom kapom vissza... :S

Esetleg ha valaki segítene, megköszönném. :)

Szerk: Odáig eljutottam, hogy választásnál mindig a második beírásnál veszi észre, hogy választottam, az elsőnél nem.

Megoldás:
Erre a hibaüzenetre: Can't call method "prepare" on an undefined value at

sub connect() {
return $connect;
}
sub select() {
my $connect = &connect();
$connect->prepare($myquery);
...
...
}

Hozzászólások


&alma(); #<- metódus hívás

sub alma() {
... # <- a metódus kifejtése :)
}

a pastebinen nincsenek ott a metódusok kifejtve, próbáld meg azt is odakopipésztelni :)
illetve a "&getinput();" és "&printmenu();" hívásokból nálad "&menu();" lett, minkettőből az gondolom nem jó :)

good luck :)

Ugyanott vagyunk, ahol eddig. A menü úgy működik, hogy tudok választani, a CSAK második választásra működik is (miért második?), és amit meghívna az egy sql select... Ám amit másoltam, nem hajtja végre. :/ Egy másik scriptemben ahol nincsek subok, simán megy a prepare() meg az execute() csak ebben nem...

Köszi, javítottam a &menu(); és már elsőre megy. :)

Már csak ezzel van baja:

sub connect() {
my $dsn = "dbi:mysql:$database:$host"; ## Data Source Name
my $connect = DBI->connect($dsn, $user, $pw) or die " [ HIBA ]";
}
sub select() {
my $query_handle = $main::connect->prepare($myquery);
$query_handle->execute();
}

igen, és nyilvánvalóan ahonnan hívod ott értékül kell adni egy változónak stb.

sub connect {
...
my $connect = DBI->connect($dsn, $user, $pw) or die " [ HIBA ]";
return $connect;
}

de most látom, hogy máshol meg globális változóként hivatkozol rá.
szóval ha globálisozol akkor így is jó: (de azt nem ajánlom mert az sosem vezet jóra.)

$main::connect = DBI->connect($dsn, $user, $pw) or die " [ HIBA ]";

Javaslom végiggondolni az alábbi fogalmakat:
- adatbázis handler,
- (sql) utasítás handler,
- függvény,
- metódus.

Nem csak úgy általában, hanem konkrétan amit ezek felől a perl gondol.

Enélkül ebből a fentiből semmit nem tanulsz, legfeljebb véletlenül jól kombinálod a példaszkriptben szereplő karakterláncokat.

Nálam hibádzik ha menükre megyek.

Use of uninitialized value $nums[0] in concatenation (.) or string at ./statsmenu.pl line 104, line 4.
Minimum number:
Use of uninitialized value within @nums in concatenation (.) or string at ./statsmenu.pl line 105, line 4.
Illegal division by zero at ./statsmenu.pl line 111, line 2.

hát... magyarul nem tudtam volna szerintem "biztonsági másolatot" szerezni, cserébe ha lesz pénzem egyszer, akkor tuti hogy meg fogom ezeket venni, mert abszolút megérdemlik.

más kiadók Perl könyveivel szóba sem állok.

amúgy szívtam is az angol miatt az elején, amikor lámáskönyvet nyúztam, még rettenet sokat kellett szótáraznom, mert kicsit elhajlik időnként prózába az egész, éppen ezért is imádom ennyire, és biztos vagyok benne, hogy megérte az erőfeszítést.

sosem felejtem el a döglött lovas történetet, az nem tudom, megvan-e :)

Hát ja. Hemzsegnek náluk az olyan oldszkúl szerzők, akik úgy gondolják, hogy egyrészt egy szakmai könyvnek legyen szerkezete, másrészt ez mégsem követeli meg, hogy egy gyomorbajos apáca is unatkozzon rajta, harmadszor pedig hogy az index az nem egy kamudolog, amit éppen csak annyira kell feltölteni, hogy aki futólag a könyvbe lapoz, azt higgye, hogy van neki.