[PERL] Term::menu -> Table + fileread

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • wallywally
  • Registratie: Maart 2004
  • Laatst online: 25-09 18:12
Hallo,

Ik probeer een scriptje in elkaar te draaien met een keuze menuutje in perl voor op de CLI. Het is al een eind zoals ik het hebben wil, maar ik kom ergens niet uit.

De bedoeling is, is dat de gebruiker een keuze menu krijgt bij het starten van het script. En dat na deze keuze een file wordt uitgelezen in een tabel met behulp van Term::Menu module.

Dit is de code die ik nu heb;

code:
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
#!/usr/bin/perl

use strict;
use warnings;
use Switch;
use Term::Menu;

my $input = '';

while ($input ne '6')
{
    clear_screen();

    Term::Menu->table(
                [qw(No# Location Abbr Type)],
                [
                        [qw(123 onnodige table info)],
                        [qw(456 onnodige table info)],
                        [qw(789 onnodige table info)],
                ]);
    print "Enter your choice: ";
    $input = <STDIN>;
    chomp($input);

        while ($input ne '7')
        {
            my $filename = '123';
            if (open(my $fh, '<:encoding(UTF-8)', $filename)) {
              while (my $row = <$fh>) {
                chomp $row;
                    Term::Menu->table(
                        [qw(No# Location Abbr Type)],
                        [
                                [qw($row)],
                        ]);
              }
            } else {
              warn "Could not open file '$filename' $!";
            }
            print "Enter your choice: ";
            $input = <STDIN>;
            chomp($input);
        }

            $input = '';
}


exit(0);

sub clear_screen
{
    system("clear");
}


Ik wil de tabel vullen met 4 waarden. Waardoor het er zo uit ziet;

code:
1
2
3
4
5
6
7
+---+--------+-----+----+
|No#|Location|Abbr |Type|
+---+--------+-----+----+
|123|onnodige|table|info|
|456|onnodige|table|info|
|789|onnodige|table|info|
+---+--------+-----+----+


Maar dit moet gebeuren vanuit een file, dat file heet dus 123. Dat file heeft de volgende contents;

code:
1
2
3
aaa bbb ccc ddd
fff ggg hhh oii
jjj kkk lll mmm


Het is dus de bedoeling, dat na de gemaakte keuze (in dit geval dus geforceerd 123, dat moet later een var worden) de tabel zich vult met de contents van de file, maar dat wil niet echt. Ik krijg errors;

Het lijkt erop dat de code dit niet erg leuk vindt;
code:
1
2
3
4
5
                    Term::Menu->table(
                        [qw(No# Location Abbr Type)],
                        [
                                [qw($row)],
                        ]);


$row bestaat dus uit "string1 string2 string3 string4"

Misschien doe ik het ook wel helemaal verkeerd hoor, ik ben niet zo'n ster in PERL maar ben op weg om het te leren. Kan iemand mij aangeven wat ik hier verkeerd doe? Of hoe het beter zou kunnen?

De foutmelding is overigens dit;

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
+---+--------+-----+----+
|No#|Location|Abbr |Type|
+---+--------+-----+----+
|123|onnodige|table|info|
|456|onnodige|table|info|
|789|onnodige|table|info|
+---+--------+-----+----+
Enter your choice: 
Use of uninitialized value in numeric gt (>) at /usr/local/share/perl/5.18.2/Term/Menu.pm line 125, <$fh> line 1.
Use of uninitialized value in numeric gt (>) at /usr/local/share/perl/5.18.2/Term/Menu.pm line 125, <$fh> line 1.
Use of uninitialized value in numeric gt (>) at /usr/local/share/perl/5.18.2/Term/Menu.pm line 125, <$fh> line 1.
+----+--------+----+----+
|No# |Location|Abbr|Type|
+----+--------+----+----+
Use of uninitialized value in subtraction (-) at /usr/local/share/perl/5.18.2/Term/Menu.pm line 153, <$fh> line 1.
Use of uninitialized value in concatenation (.) or string at /usr/local/share/perl/5.18.2/Term/Menu.pm line 153, <$fh> line 1.
Use of uninitialized value in subtraction (-) at /usr/local/share/perl/5.18.2/Term/Menu.pm line 153, <$fh> line 1.


En dan nog een hele rits aan dezelfde door die loop die erin zit.

Bedankt.