Pokaż wyniki 1 do 5 z 5

Temat: Perl - przekazywanie argumentów do procedury w module

  1. #1

    Domyślnie Perl - przekazywanie argumentów do procedury w module

    Witam bardzo serdecznie.

    Stworzyłem własny moduł perla, a w nim jedną funkcję check_base. Chciałbym przekazać do niej dwa argumenty. Oto kod:

    Moduł
    Kod:
    package Own::database;
    
    
    use strict;
    use warnings;
    
    use CGI ':standard';
    
    use Spreadsheet::ParseExcel;
    
    require Exporter;
    our @ISA = qw(Exporter);
    our @EXPORT = qw(check_base);
    
    sub check_base {
        my($Mail, $Haslo) = @_;
    if ($value eq $Mail) {return 1;}
    else {return 0;}
    }

    Skrypt
    Kod:
    use locale;
    use strict;
    use warnings;
    
    use CGI ':standard';
    
    use Spreadsheet::ParseExcel;
    
    use Own::database;
    
    my $q = new CGI;
    
    my $Mail = $q->param('mail');
    my $Haslo = $q->param('haslo');
    
    my $checked = check_base($Mail, $Haslo);
    Dostaję błąd: Use of uninitialized value $Mail[0] in string eq at ...

    Co robię źle?
    Bardzo proszę o pomoc.

    Pozdrawiam

  2. #2
    Zarejestrowany
    Jun 2006
    Skąd
    rand(.eu)
    Postów
    8,748

    Domyślnie

    Cytat Napisał maciejp Zobacz post
    Dostaję błąd: Use of uninitialized value $Mail[0] in string eq at ...

    Co robię źle?
    Bardzo proszę o pomoc.
    Przeciez komunikat jasno mowi co robisz zle... uzywasz tablicy @Mail ktora nie jest zdefiniowana. Poza tym komunikat jasno podaje ktora linia w ktorym pliku ale nie raczysz podac czy to ten plik i ta linia co pokazales powyzej.

    Jednym zdaniem - czytanie ze zrozumieniem ma ogromna przyszlosc.
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

  3. #3

    Domyślnie

    Cytat Napisał TQM Zobacz post
    Przeciez komunikat jasno mowi co robisz zle... uzywasz tablicy @Mail ktora nie jest zdefiniowana. Poza tym komunikat jasno podaje ktora linia w ktorym pliku ale nie raczysz podac czy to ten plik i ta linia co pokazales powyzej.

    Jednym zdaniem - czytanie ze zrozumieniem ma ogromna przyszlosc.
    Kurcze, przepraszam, że zadałem pytanie Nie wiem po co się irytujesz i mi ubliżasz, ale skoro sprawia Ci to przyjemność, to proszę, bylebym dowiedział się tego czego chcę.

    Zaczynam dopiero naukę perla i myślałem że to oczywiste, że po prostu nie wiem jak tą tablicę zdefiniować.

    Jednym zdaniem - wiem co mówi komunikat, nie wiem jak rozwiązać problem.

    Błąd wskazuje na 17 linię pliku Modułu.

  4. #4
    Zarejestrowany
    Jun 2006
    Skąd
    rand(.eu)
    Postów
    8,748

    Domyślnie

    Wybacz jesli czujesz ze Ci ublizam, nie o to mi chodzi. Podales po prostu pytanie pomijajac glowne detale - wrozek tutaj nie ma. Np wyciales z komunilatu numer linii, wiec nie dajesz nam nawet szansy na udzielenie odpowiedzi.

    Linia:
    Kod:
    if ($value eq $Mail) {return 1;}
    Nie wiem dlaczego Perl mowi ze uzywasz $Mail[0] skoro nie uzywasz, ale za to uzywasz niezdefiniowanej zmiennej $value, chyba ze brakuje jeszcze jakiegos innego kawalku kodu. Na razie traktuj moja odpowiedz jako zgadywanke.
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

  5. #5

    Domyślnie

    Cytat Napisał TQM Zobacz post
    Wybacz jesli czujesz ze Ci ublizam, nie o to mi chodzi. Podales po prostu pytanie pomijajac glowne detale - wrozek tutaj nie ma. Np wyciales z komunilatu numer linii, wiec nie dajesz nam nawet szansy na udzielenie odpowiedzi.

    Linia:
    Kod:
    if ($value eq $Mail) {return 1;}
    Nie wiem dlaczego Perl mowi ze uzywasz $Mail[0] skoro nie uzywasz, ale za to uzywasz niezdefiniowanej zmiennej $value, chyba ze brakuje jeszcze jakiegos innego kawalku kodu. Na razie traktuj moja odpowiedz jako zgadywanke.
    Eh cholera, gdzieś mi to $value uciekło, ale przez to testowałem to na milion sposobów. Nie mam już tamtego kodu, mam nowszą wersję, bardziej już użyteczną.

    Moduł
    Kod:
    package Own::database;
    
    use locale;
    use strict;
    use warnings;
    
    use CGI ':standard';
    
    use Spreadsheet::ParseExcel;
    
    require Exporter;
    our @ISA = qw(Exporter);
    our @EXPORT = qw(check_base);
    
    sub check_base {
        my($Mail, $Haslo) = @_;
        
        my $q = new CGI;
    
        my $parser   = Spreadsheet::ParseExcel->new();
        my $workbook = $parser->parse('baza.xls');
        
            if ( !defined $workbook ) {
                die $parser->error(), ".\n";
            }
            
            my $worksheet = $workbook->worksheet(0);
            my $pomocnicza=0;
        
            my ( $row_min, $row_max ) = $worksheet->row_range();
                
            for my $row ( $row_min .. $row_max ) {
        
                if ($row == $row_max) {$pomocnicza=1};
                my $cell = $worksheet->get_cell($row, 0);
                my $value = $cell->value();
                
                if ($value eq $Mail) {
                    my $cell = $worksheet->get_cell( $row, 1);
                    my $value = $cell->value();
                    if ($value eq $Haslo) {
                        return 1;
                        last;
                    }
                }
                else {
                    return 0;    
                }
            }
        }   
    1;
    Skrypt
    Kod:
    #!C:\Strawberry\perl\bin\perl -w
    
    use locale;
    use strict;
    use warnings;
    
    use CGI ':standard';
    
    use Spreadsheet::ParseExcel;
    
    use Own::database;
    
    my $q = new CGI;
    
    my $Mail = $q->param('mail');
    my $Haslo = $q->param('haslo');
    
    my $checked = check_base($Mail, $Haslo);
    
    if ($checked) {
        print redirect('http://localhost/zalogowano.html');
    }
    else {
        print header(-type=>"text/html; charset=ISO-8859-2");
        print start_html(-title=>'Organizer',
                            -lang=>'pl-PL',
                            -encoding=>'ISO-8859-2');
        print '<form action="/cgi-bin/logowanie.cgi" method="post">';
        print 'Adres e-mail: ';
        print '<br>';
        print textfield(-name=>'mail',
                            -size=>15,
    			-maxlength=>30);
        print '<br>';
        print 'Hasło: ';
        print '<br>';
        print textfield(-name=>'haslo',
                            -size=>15,
    			-maxlength=>30);
        print '<br>';
        print submit(-name=>'Logowanie',
    		    -value=>'Zaloguj');
        print '</form>';
        print '<form action="http://localhost/index.html" method="link">';
        print submit(-name=>'przypomnienie',
                        -value=>'Przypomnij hasło',
                        -action=>'przypomnienie.cgi');
        print '</form>';
        print '<font color="red"> Błędne dane logowania.</font>';
        print '<br>';
        print a({
                -href=>'http://localhost/rejestracja.html'},
                'Rejestracja');
        print end_html;
    }
    Jeśli wszystko jest w jednym pliku działa idealnie. Ale jak widać, chciałbym część gdzie sprawdzany jest arkusz przenieść do modułu. Niestety, ciągle czepia się przekazanych do modułu zmiennych: $Mail i $Haslo. Oto co wyrzuca konsola:

    Kod:
    Use of uninitialized calue $Mail in string eq at../moduł line 38.
    Tak jak w powyższym błędzie pokazałem, dotyczy on pliku modułu, ale z konsoli uruchamiam plik Skryptu. Oczywiście po usunięciu zmiennej $Mail, przyczepi się do $Haslo :/
    Ostatnio edytowane przez maciejp : 04-28-2013 - 10:07

Zasady Postowania

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •  
Subskrybuj