[Perl] require 를 어떻게 써야 하지요?

sDH8988L의 이미지

Perl에서 Global Variables을 모아서 File을 하나 만들었습니다. 이걸 include 하려고 require를 다음과 같이 썼는데요...

# a.cfg file

my @name = (... ... ... ...);

# perl file

use strict;

require "a.cfg";

print @name;

이렇게 Code를 짜면, print @name 부분에서 '...require explicit package name...' 이런 식의 Compile Error 가 나네요...

위 Error는 use strict를 썼을 경우, 선언을 하지 않고 Variable을 쓰면 나오는 Error랑 동일한데요. 결국 require에서 include가 잘 안되는 거 같습니다...

어떻게 해야 될까요?

sDH8988L의 이미지

그냥 간단하게 얘기해서 제가 하고자 하는 바는 C에서 include 하는 것처럼 Global Variable들을 여러 개의 Perl File에서 이용하고자 하는 겁니다. 여기서 Global Variable들은 전부 Constant의 성격을 띄고 있어서 여러 Perl File에서 참조만 하는 거지요...

그런데, 왜 이런 간단한 것들이 Tutorial이나 Manual에는 없는 걸까요...

C라면 Chapter 1에 나오는 얘기 아닙니까?

raymundo의 이미지

sDH8988L wrote:
그냥 간단하게 얘기해서 제가 하고자 하는 바는 C에서 include 하는 것처럼 Global Variable들을 여러 개의 Perl File에서 이용하고자 하는 겁니다. 여기서 Global Variable들은 전부 Constant의 성격을 띄고 있어서 여러 Perl File에서 참조만 하는 거지요...

저도 펄을 잘 아는 게 아니라서 이게 정답인지는 모르겠습니다만....

일단 원하는 결과를 내기 위해서: 펄 파일 쪽에 use strict 를 없애고, a.cfg 에도 my 키워드를 없애 주세요.

반드시 use strict 를 쓸 경우는: 펄 파일 쪽에서 변수를 먼저 선언해줘야 하니

#!/usr/bin/perl
use strict;

use vars '@name';

require "a.cfg";

print @name;

이 때도 역시 a.cfg 에 my 키워드는 없어야 합니다. 잘은 모르겠지만 my 를 붙이면 로컬 변수가 되어 버리는 듯 하군요.

sDH8988L wrote:

그런데, 왜 이런 간단한 것들이 Tutorial이나 Manual에는 없는 걸까요...

C라면 Chapter 1에 나오는 얘기 아닙니까?

글쎄요. ^^;

좋은 하루 되세요!

sDH8988L의 이미지

raymundo wrote:
sDH8988L wrote:
그냥 간단하게 얘기해서 제가 하고자 하는 바는 C에서 include 하는 것처럼 Global Variable들을 여러 개의 Perl File에서 이용하고자 하는 겁니다. 여기서 Global Variable들은 전부 Constant의 성격을 띄고 있어서 여러 Perl File에서 참조만 하는 거지요...

저도 펄을 잘 아는 게 아니라서 이게 정답인지는 모르겠습니다만....

일단 원하는 결과를 내기 위해서: 펄 파일 쪽에 use strict 를 없애고, a.cfg 에도 my 키워드를 없애 주세요.

반드시 use strict 를 쓸 경우는: 펄 파일 쪽에서 변수를 먼저 선언해줘야 하니

#!/usr/bin/perl
use strict;

use vars '@name';

require "a.cfg";

print @name;

이 때도 역시 a.cfg 에 my 키워드는 없어야 합니다. 잘은 모르겠지만 my 를 붙이면 로컬 변수가 되어 버리는 듯 하군요.

sDH8988L wrote:

그런데, 왜 이런 간단한 것들이 Tutorial이나 Manual에는 없는 걸까요...

C라면 Chapter 1에 나오는 얘기 아닙니까?

글쎄요. ^^;

덕분에 문제를 해결했습니다. my keyword하고 use strict 부분 때문에 그런 것이었군요...

감사합니다...

그런데, use strict를 쓰는 것이 좀 더 Safe한 Programming을 위해서 좋은데, 저런 식으로 module을 쓰게 되면, use strict가 상당히 한정적으로 사용될 수 밖에 없겠군요...

왜 Perl이 그런 식으로 정의되어 있는 지 상당히 궁금하네요...

다시 한 번 감사드립니다....

쌀밥의 이미지

추가 질문을 달고 싶은데요...

perl 에서 my 라는게 정확히 어떤 의미일까요??

예전에 책을 뒤져보고 뉴스 그룹을 뒤져본 기억으로는

성능상의 효율 때문에 my 라는 키워드가 남아있다고 본 기억이 있는데

명확한 기능을 본 기억이 없는 듯 하네요...

my 는 지역적인 변수에 사용하고

앞의 상황과 같은 경우에는 use strict와 함께 local 로 선언된 변수를 사용하면 되지 않을까요?

일하는 사람들의 희망 민주노동당 : http://www.kdlp.org
반공 교육의 성과로, 민주주의의 반대가 공산주의(또는 사회주의)라고 생각하는 사람이 많다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.