세로형
Recent Posts
Recent Comments
Link
03-29 00:03
«   2024/03   »
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
Archives
Today
Total
관리 메뉴

꿈 많은 사람의 이야기

펄 서브루틴(perl subroutine) 활용하기 여러 값 보내서 테이블 출력 본문

perl

펄 서브루틴(perl subroutine) 활용하기 여러 값 보내서 테이블 출력

이수진의 블로그 2017. 10. 17. 09:48

안녕하세요~

저번 글까지 펄의 서브루틴, 펄을 이용한 웹 페이지 출력 등을 진행해 보았습니다

하나씩 정리해보자 라는 생각으로 블로그에 정리를 시작했는데요

어느덧 자료가 많이 쌓였네요

하루에 1시간도 공부를 못하긴 하지만 그래도 짬짬히 공부했더니 많이 쌓였네요

 

어쨋든 이번에는 이 서브루틴을 이용해서 웹 페이지에 출력하려고 합니다.

일종의 함수화이죠

 

해시의 값에 따라 테이블 개수가 달라지는 방식인데요

 

처음엔 아래 사진 처럼 진행될 것입니다.

 

 

그리고 해시 개수를 늘리면 아래 사진처럼 될 것입니다.

 

여기서의 핵심은 서브루틴의 구조는 바뀌지 않는다!입니다.

 

단지, 전달해 주는 값만 바뀌는 거죠

 

바로 소스코드 보여 드리겠습니다~

 

 

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
55
56
57
58
59
%x_label =  (
1=>"11",
2=>"22",
3=>"33",
4=>"44",
5=>"55",
);
 
%y_label = (
1=>"66",
2=>"77",
);
 
 
 
my_custom_table(\%x_label, \%y_label, "test!");
 
 
sub my_custom_table
{
    my ($x_label$y_label$text= @_;
 
    
    $x_size = keys(%x_label);
    $y_size = keys(%y_label);
    print "Content-type: text/html \n\n";
    print "<html>";
    print     "<body>";
    print "<br><center><table align=center width=850 border=1 > \n";
    print "<tr><td> &nbsp;</td> \n";
    for my $i(1..$x_size)
    {
        print "<td>$x_label{$i}</td>\n";
    }
    print "</tr>\n";
    for my $i(1..$y_size)
    {
        print "<tr><td>$y_label{$i}</td>\n";
        for my $j(1..$x_size)
        {
            
            if($j == $x_size)
            {
                print "<td><input type=\"text\" size=5 readonly />$text</td>\n";
            }
            else
            {
                print "<td><input type=\"text\" size=5 />$text</td>\n";
            }
        }
        print "</tr>\n";
    }
    print "</table></center> \n";
    print "</body>\n";
    print "</html>\n";
    
    
 
}
cs

이렇게 되는 소스입니다

맨 위에 해시를 2개 선언했죠? 그리고 이 2개의 해시와, table 안에 출력할 text를 인자로 보냅니다.

my_custom_table이라는 함수는 이 여러개의 값을 받는데요

서브루틴이 여러개의 값을 받으려면 저렇게 받을 수 있습니다.

그러면 각각의 값이 각각의 스칼라값으로 들어가게 되죠

여기서 햇갈리는게 해시 값을 스칼라 즉 $로 받는다는 겁니다.

근데 실제 값은 해시로 적용되어요.

저도 처음엔 이게 이해가 안되었는데(사실 지금도 이해가 잘 안되요) 그냥 뭐라고 해야할까요

가슴으로 받아들여지네요

 

그리고 아래처럼 해시 값을 바꾸면 2번째 사진 처럼 나오게 됩니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
%x_label =  (
1=>"11",
2=>"22",
3=>"33",
4=>"44",
5=>"55",
6=>"add_x_1",
6=>"add_x_2",
);
 
%y_label = (
1=>"66",
2=>"77",
3=>"add_y1",
3=>"add_y2",
);

cs

 

 

 

 

이렇게 함수화하면 편리하겠죠?

오늘은 여기까지!

 

 

반응형
그리드형
Comments