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);
...
...
}
- 2351 megtekintés
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 :)
- A hozzászóláshoz be kell jelentkezni
Üdv!
A probléma fennáll, és még más is van, pl:
63. my $query_handle = $main::connect->prepare($myquery);
64. $query_handle->execute();
Can't call method "prepare" on an undefined value at..... line 63
ha kikommentezem a 63. sort, ugyanez a baja az execute()-al is a 64. sorban
- A hozzászóláshoz be kell jelentkezni
kezdem elveszteni a fonalad :) ez egy harmadik szkript már, nem?
- A hozzászóláshoz be kell jelentkezni
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...
- A hozzászóláshoz be kell jelentkezni
ok, a ciklus előtti &menu(); hívás nem kell, elsőre azért nem történik semmi.
$main::connect meg valami ojjektum lehet :) meg kell kreálni, így vakon, hogy nem látom a kódot abban nem tudok segíteni.
- A hozzászóláshoz be kell jelentkezni
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();
}
- A hozzászóláshoz be kell jelentkezni
http://perldoc.perl.org/functions/my.html
a metóduson bellüli my-al deklarált változó lokális, csak a metódusban él add vissza return-el, vagy rakd globális változóba, de ezt utóbbit nem én mondtam :) szóval return-old :)
- A hozzászóláshoz be kell jelentkezni
a connectnél?
- A hozzászóláshoz be kell jelentkezni
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 ]";
- A hozzászóláshoz be kell jelentkezni
return $connect; megvan de
Can't call method "prepare" on an undefined value at ./valami.pl line 50, < STDIN > line 1.
my $query_handle = $main::connect->prepare($myquery);
itt $main nem jó, jól sejtem?
- A hozzászóláshoz be kell jelentkezni
igen a $main::connect az egy globális változó, ami nem mutat semmire.
- A hozzászóláshoz be kell jelentkezni
kellett egy my $connect = &connect();
és így működik.
Köszi a helpet! :)
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
a példa szkriptnek szerintem semmi baja.
te viszont (most ne sértődj meg, de...) ha ennyire nem tudod, hogy mit csinálsz, akkor előbb olvass el egy-két Perl könyvet, az O'Reilly kiadónak nagyon atom könyvei vannak a témában kezdőtől egészen mindfuck-ig.
- A hozzászóláshoz be kell jelentkezni
Szerinted. :) Nálam nem működik... :)
És van nálam éppen egy 700 valahány oldalas könyv, abból tanulok, köszi, csak elakadtam. :) Ez is gyakorlás.
- A hozzászóláshoz be kell jelentkezni
nálam működik
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
ezt nálam csak akkor írja ki (a 3. menüpontnál), ha az égvilágon semmi bemenetet nem kap. ott már tartasz a könyvben, hogy mire való a gyémánt operátor? (<>)
- A hozzászóláshoz be kell jelentkezni
A statsmenu.pl prímán műx. A másikat nem néztem. Ha tanulni akarsz, akkor javaslom a "the Llama Book"-ot (Igen, kettő l-lel az elején), utána meg a Camel Book jöhet :-D
- A hozzászóláshoz be kell jelentkezni
így így.
szerk.: ja nem. első a Llama, de a második asszem az Alpaca
szerk2.: ja nem. első Llama, utána Camel, utána Alpaca
aztán ha nagyon elborusz akkor Black Panther meg Wolf pl.
- A hozzászóláshoz be kell jelentkezni
És szigorúan angolul, mert a Kossuth kiadó által magyar nyelven megjelentetett the Llama Book röviden és finoman szólva is katasztrófa. A Panem-es Perl 1 és 2. viszont jó.
- A hozzászóláshoz be kell jelentkezni
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 :)
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
:-)
- A hozzászóláshoz be kell jelentkezni