├── README.md └── treasureHunt_v2_kor.pl /README.md: -------------------------------------------------------------------------------- 1 | ## treasurehunt_v2_kor.pl 사용법 2 | UCSF에 계시는 Stephan J. Sanders 박사가 처음 만든 스크립트를 기반으로 준킴이 번역 초안을 맡고, 시바님이 감수해주셨습니다. 3 | 자세한 내용은 본문 열어서 확인해보세요! 4 | 5 | 0. Linux OS 설치된 컴퓨터를 준비한다. 또는 Linux OS 설치된 서버에 접속할 수 있는 ID를 준비한다. 6 | 7 | 1. git이 깔려있는지 확인합니다. 터미널 열고 타이핑 하세요. 8 | ```sh 9 | git --version 10 | ``` 11 | 만약에 12 | ```sh 13 | Command 'git' not found, but can be installed with: 14 | 15 | sudo apt install git 16 | ``` 17 | 등등 git 설치 안 돼 있으면 시키는 대로 하시고, 버전 딱 뜨면 다음으로 넘어가시면 됩니다. 18 | 19 | 2. 터미널 열고 복사 붙여 넣기 하십쇼. 20 | ```sh 21 | mkdir treasure && cd treasure 22 | git clone https://github.com/JunKim-Worms/unix_tutorial.git 23 | perl unix_tutorial/treasureHunt_v2_kor.pl 24 | rm -rf unix_tutorial/ 25 | ``` 26 | 27 | 이 중 ```treasureHunt_v2_kor.pl``` 파일이 보물 찾기 게임을 실행해주는 파일입니다. 28 | 이 게임은 Perl이라는 프로그래밍 언어로 짜였습니다. 29 | ```.pl``` 이라는 확장자로 끝나면 ```perl file.pl``` 등으로 실행할 수 있습니다. 30 | 31 | 3. 파일들이 잘 생성됐다면 이제 nano 또는 cat을 이용해 단서를 열고 읽어봅시다. 32 | ```sh 33 | cat Clue01_S.txt # or nano Clue01_S.txt 34 | ``` 35 | 36 | 4. 문제 다 풀었는데 선물 준비 안 해놨으면 담당자를 혼내주도록 합시다. 독학해서 담당자가 없다면 메일 주세요. 37 | -------------------------------------------------------------------------------- /treasureHunt_v2_kor.pl: -------------------------------------------------------------------------------- 1 | use strict; 2 | use POSIX; 3 | 4 | # 이 스트립트는 원래 영국에서 시작되었으며... 아아니 미국 해양연구소 (Marine Biology Labs, 메사추세츠 우즈홀)에서 시작하였으며 5 | # Stephan J Sanders 교수(캘리포니아 대학 샌프란시스코)가 신경생물학 코스에서 유닉스 강의를 하기 위해 고안되었음. 6 | # 그 강의의 교육조교로 착취당하던 시바가 동아시아로 밀수했고, 7 | # 이후 이 코드는 준킴이 한글로 번역하였음. 8 | 9 | # 이 스크립트는 유닉스 기본 명령어 및 Sanders 교수의 문학 갬성을 주입, 아아니 가르치기 위해 제작되었으며, 10 | # 비 사업적인 용도를 위해 사용이 가능하다. 단, 한가지 조건이 있다. 그것은 11 | 12 | # 무조건, 반드시 당신은 진짜 "보물"을 준비해야한다. 13 | 14 | # You can describe where the treasure is 15 | # hidden here: 16 | 17 | my $theTreasure = "보물을 발견했다!\n". 18 | "보물을 준비해놓지 않았다면 혼내주도록 하자.\n". 19 | "또 항상 기억하도록 하자. 훌륭한 생물정보마술사는 포트 로더데일 합의를 준수하고,\n". 20 | "자신들의 데이터/연구를 공유한다는 것을! (보물 찾기 종료. 수고하셨습니다!)"; 21 | 22 | # Create locations 23 | my @places = ( 24 | "pineTree", "largeStone", "blueHouse", "church", "pub", 25 | "boat", "smallStone", "bridge", "ashTree", "beach", "oakTree", 26 | "waterTower", "bellTower", "harbour", "ferryPort", "busStop", 27 | "library", "giftShop", "lab", "cafe", "bikeShop", "bikePath", 28 | "lake", "piratesCove", "parrotShop", "prostheticShop", 29 | "ophthalmologist", "rumBarrel", "sailMakers", "plankMaker", 30 | "swordShop", "lightHouse", "newsAgent" 31 | ); 32 | 33 | my @directions = ( 34 | "eastOneStep", "eastTwoSteps", "eastThreeSteps", "eastFourSteps", "eastFiveSteps", 35 | "southOneStep", "southTwoSteps", "southThreeSteps", "southFourSteps", "southFiveSteps", 36 | "westOneStep", "westTwoSteps", "westThreeSteps", "westFourSteps", "westFiveSteps", 37 | "northOneStep", "northTwoSteps", "northThreeSteps", "northFourSteps", "northFiveSteps" 38 | ); 39 | 40 | my @directions2 = ( 41 | "eastOneStep", "eastTwoSteps", "eastThreeSteps", "eastFourSteps", "eastFiveSteps", 42 | "southOneStep", "southTwoSteps", "southThreeSteps", "southFourSteps", "southFiveSteps", 43 | "westOneStep", "westTwoSteps", "westThreeSteps", "westFourSteps", "westFiveSteps", 44 | "northOneStep", "northTwoSteps", "northThreeSteps", "northFourSteps", "northFiveSteps", 45 | "closeEyesAndWalkTowardsTheSoundOfTheWaves", "atThreeOClockFollowParallelToTheShadowFromTheFlagPole", 46 | "atTheSummerSolsticeDigWhereTheFirstRayOfLightMeetsThePath" 47 | ); 48 | 49 | foreach my $dir (@places){ 50 | mkdir $dir; 51 | foreach my $dir2 (@directions){ 52 | mkdir $dir.'/'.$dir2; 53 | foreach my $dir3 (@directions2){ 54 | mkdir $dir.'/'.$dir2.'/'.$dir3; 55 | } 56 | } 57 | } 58 | 59 | # Create output files 60 | my $output1 = 'Clue01_S.txt'; 61 | my $OUT1 = &openOut($output1); 62 | 63 | print $OUT1 "대학 도서관을 뒤지던 도중에 당신은 준킴의 오래된 일기장을 발견했다. 일기장 마지막에는 다음과 같은 흥미로운 이야기가 적혀 있었다:\n\n". 64 | "00년 00월 00일, 예쁜꼬마선충 폴리와 나는 우리의 보물을 아무도 찾지 못할 곳에 묻어놨다! 폴리 말로는 대학 안에 있는 장소만 해도 60,000곳이 넘기 때문에 결코 찾을 수 없을 거라고 한다.\n\n". 65 | "안타까운 점은 학부를 졸업했을 때 하필이면 대학원, 그것도 생명과 대학원에 가야겠다는 잘못된 선택을 한 것이다. 덕분에 기억력이 예전 같지 못해 나중에 보물 위치를 기억할 수 있을지 모르겠다.\n". 66 | "그래서 나중에 내 보물을 다시 찾을 수 있도록, 오직 박사과정이면서 생물정보마술사인 나만이 이해할 수 있는 몇 개의 단서(Clue) 안에 이 보물의 행방을 남겨두었다.\n". 67 | "이제 첫 번째 단서를 찾으려면 물의 탑(water tower)으로 들어가 서쪽으로 세 걸음, 남쪽으로 다섯 걸음 가서 땅을 파내라!\n". 68 | "쾅!\n". 69 | "시바님, 무슨 일입니까?\n". 70 | "준님! 교수님들이 오고 계세요!\n". 71 | "이런, 교수들이 우릴 발견했다. 학부생들을 탈출시키려던 우리의 꿈은 이렇게 무너지는 건가. 도망쳐, 폴리! 생명과는 안 돼...\n\n". 72 | "더 자세한 이야기를 듣고 싶어 사서에게 물어보니, 준킴은 한때 이 대학에서 가장 촉망받는 대학원생이었지만, 생명과의 한계를 극복할 순 없었다고 한다. 그의 기록은 오직 그가 남긴 단서밖에 없는 셈이었다.\n\n". 73 | "문제를 풀기 전에, 먼저 단서를 담아둘 \'toteBag\' 디렉토리를 하나 만들자(mkdir).\n". 74 | "방금 찾아낸 이 첫번째 단서를 그 디렉토리 안에 복사하고(cp), 디렉토리 안에 잘 들어갔는지 확인하자(ls).\n\n이제 물의 탑으로 출발하라!\n"; 75 | 76 | my $output2 = 'waterTower/westThreeSteps/southFiveSteps/Clue02_W.txt'; 77 | my $OUT2 = &openOut($output2); 78 | 79 | print $OUT2 "다음 단서는 99% 에탄올 병으로 위장한 오래된 럼주 통(rumBarrel) 근처에 숨겨두었다. 럼주 통을 기준으로 북쪽으로 두 걸음, 서쪽으로 네 걸음 가면 찾을 수 있다.\n". 80 | "참고로 시약병 사이에 단서를 숨겨두려다 보니 작게 쪼그라뜨리고 압축해서 집어넣어둘 수밖에 없었다. 단서를 읽으려면 gunzip을 써서 압축을 풀도록 하자.\n". 81 | "지금 읽고 있는 이 단서를 가방(toteBag) 안에 복사(cp)해두는 것도 잊지 말 것!\n"; 82 | 83 | my $output3 = 'rumBarrel/northTwoSteps/westFourSteps/Clue03_O.txt'; 84 | my $OUT3 = &openOut($output3); 85 | 86 | print $OUT3 "이 동네에 컴퓨터를 잘 아는 다른 과학 덕후들이 많다 보니, 이들이 우리가 남긴 단서를 쫓아올까봐 예쁜꼬마선충 폴리가 걱정하고 있다.\n". 87 | "하지만 걱정하지 마라. 손은 눈보다 빠르니까. 이들을 속일 심산으로, 우린 99개의 빈 종이를 섞어두고, 딱 1개에만 단서를 적어 신문가판대(newsAgent) 안에 숨겨뒀다.\n". 88 | "ls를 잘 사용할 줄 아는 우리만이 이 단서를 찾을 수 있을 것이다. 신문가판대 안에서 남쪽으로 다섯 걸음, 서쪽으로 한 걸음 내딛자.\n"; 89 | 90 | `gzip $output3`; 91 | 92 | foreach my $num (0..100){ 93 | my $output4 = 'newsAgent/southFiveSteps/westOneStep/Clue04_R_'.$num.'.txt'; 94 | my $OUT4 = &openOut($output4); 95 | } 96 | 97 | my $here = `pwd`; 98 | $here =~ s/[\n\r]//g; 99 | my $output4 = 'newsAgent/southFiveSteps/westOneStep/Clue04_R_78.txt'; 100 | my $OUT4 = &openOut($output4); 101 | print $OUT4 "이런, 세포 미디어 갈아줘야 할 시간이다.\n". 102 | "다행히 다음 단서가 정확히 어디에 있는지 알고 있다. cd 치고 다음 문구를 붙여넣으면 그쪽으로 단번에 갈 수 있다.\n". 103 | $here."/harbour/westThreeSteps/northTwoSteps\n"; 104 | 105 | my $output5 = 'harbour/westThreeSteps/northTwoSteps/Clue05_D.txt'; 106 | my $OUT5 = &openOut($output5); 107 | 108 | print $OUT5 "아주 예쁜 진주(Perl)가 해안(beach)에 떨어져 있다. 이 정도면 우릴 쫓아오는 사람들을 속일 수 있을 거다. 동쪽으로 한 걸음, 남쪽으로 한 걸음.\n"; 109 | 110 | #`cp ~/scripts/Clue06.pl beach/eastOneStep/southOneStep/`; 111 | 112 | my $output7 = 'bridge/northFiveSteps/westOneStep/Clue07_H.txt'; 113 | my $OUT7 = &openOut($output7); 114 | 115 | print $OUT7 "진정한 생물정보마술사만이 키보드 탭(Tab) 키를 이용해 파일 이름을 쉽게 완성할 수 있는 법! 이를 시험하고자 엄청나게 이름이 긴 파일을 만들었다.\n". 116 | "탭 안 쓰고 직접 하나하나 따라 치려면 손가락 떨어질 걸? 소나무(pineTree)로 가라. 북쪽으로 다섯 걸음 향한 뒤, 깃대 그림자와 평행하게 3시 방향(3\'o clock)으로 향해라.\n"; 117 | 118 | my $output8 = 'pineTree/northFiveSteps/atThreeOClockFollowParallelToTheShadowFromTheFlagPole/Clue08_O.txt'; 119 | my $OUT8 = &openOut($output8); 120 | 121 | print $OUT8 "탭 만세! 탭이란 얼마나 소중한 버튼인가. 두 말할 필요가 없다. 탭이 없었다면 파이펫 아닌 키보드로도 관절염에 걸릴 수 있다는 걸 배우게 됐겠지.". 122 | "이제 앵무새를 구하러 가자(parrotShop). 동쪽으로 세 걸음 간 뒤, 눈을 감고 파도 소리가 들려오는 곳을 향해 걸어라.\n"; 123 | 124 | my $output9 = 'parrotShop/eastThreeSteps/closeEyesAndWalkTowardsTheSoundOfTheWaves/Clue09_P.txt'; 125 | my $OUT9 = &openOut($output9); 126 | 127 | print $OUT9 "다른 박사과정 대학원생들이 탭 안 쓰고 명령어 일일이 치고 있는 걸 보면 새벽에 티타임 갖는 걸 보는 것 만큼이나 너어어무 고통스럽다.\n". 128 | "다시 한 번 해보자. 등대(lightHouse)로 가서 서쪽으로 다섯 걸음, 다시 하지(summer solstice)에 최초로 비치는 빛이 만나는 지점을 향해 나아가라.\n"; 129 | 130 | my $output10 = 'lightHouse/westFiveSteps/atTheSummerSolsticeDigWhereTheFirstRayOfLightMeetsThePath/Clue10_5.txt'; 131 | my $OUT10 = &openOut($output10); 132 | 133 | print $OUT10 "좋아, 지금까지 뭔가를 만드는 일을 해봤다. 이제 박사과정들이 뭔가(우리 인생 같은 거?)를 지우는 데 얼마나 일가견 있는지 한번 살펴보자.\n". 134 | "보철 기구 파는 가게(prostheticShop)로 가자. 북쪽으로 한 걸음, 동쪽으로 네 걸음.\n"; 135 | 136 | my $output11 = 'prostheticShop/northOneStep/eastFourSteps/falseClue11.txt'; 137 | my $OUT11 = &openOut($output11); 138 | print $OUT11 "아무것도 없잖아!!! 펄 스크립트를 시도해보자(perl).\n"; 139 | 140 | my $output11a = 'prostheticShop/northOneStep/eastFourSteps/Clue11_N.txt'; 141 | my $OUT11a = &openOut($output11a); 142 | 143 | print $OUT11a "다음 단서를 얻으려면 파일을 이동시키거나 이름을 바꿔야 한다. 거대한 바위(largeStone)로 향해 남쪽으로 두 걸음, 서쪽으로 네 걸음 가라.\n". 144 | "석영(quartz) 덩어리가 보일 것이다. 이걸 가방(toteBag)에 복사하지 말고 이동(mv)시키도록 하자.\n". 145 | "가방으로 이동하고 나면 파일 이름을 \'Clue12_5.txt\' 으로 바꿔보자(mv).\n"; 146 | 147 | `mv prostheticShop/northOneStep/eastFourSteps/Clue11_N.txt prostheticShop/southThreeSteps/westThreeSteps/Clue11_N.txt`; 148 | #`cp ~/scripts/realClue11.pl prostheticShop/northOneStep/eastFourSteps/`; 149 | 150 | my $output12 = 'largeStone/southTwoSteps/westFourSteps/quartz.txt'; 151 | my $OUT12 = &openOut($output12); 152 | 153 | my $command = 'touch largeStone/southTwoSteps/westFourSteps/grey.txt largeStone/southTwoSteps/westFourSteps/purple.txt '. 154 | 'largeStone/southTwoSteps/westFourSteps/white.txt largeStone/southTwoSteps/westFourSteps/rolling.txt '. 155 | 'largeStone/southTwoSteps/westFourSteps/roses.txt largeStone/southTwoSteps/westFourSteps/mason.txt '. 156 | 'largeStone/southTwoSteps/westFourSteps/granite.txt largeStone/southTwoSteps/westFourSteps/grit.txt '. 157 | 'largeStone/southTwoSteps/westFourSteps/sedimentary.txt largeStone/southTwoSteps/westFourSteps/igneous.txt '. 158 | 'largeStone/southTwoSteps/westFourSteps/metamorphic.txt largeStone/southTwoSteps/westFourSteps/marble.txt '. 159 | 'largeStone/southTwoSteps/westFourSteps/brown.txt largeStone/southTwoSteps/westFourSteps/bladder.txt '. 160 | 'largeStone/southTwoSteps/westFourSteps/kidney.txt largeStone/southTwoSteps/westFourSteps/rosetta.txt '. 161 | 'largeStone/southTwoSteps/westFourSteps/blarney.txt largeStone/southTwoSteps/westFourSteps/head.txt '. 162 | 'largeStone/southTwoSteps/westFourSteps/sand.txt largeStone/southTwoSteps/westFourSteps/lime.txt '; 163 | `$command`; 164 | 165 | print $OUT12 "다음 단서는 파일 시작 부분이 아니라 가장 끝 부분에서 확인할 수 있다(tail). 파일도 아주 기이이이일게 만들어뒀다.\n". 166 | "자전거 길(bikePath)로 가자. 남쪽으로 세 걸음, 동쪽으로 한 걸음.\n"; 167 | 168 | my $output13 = 'bikePath/southThreeSteps/eastOneStep/Clue13_W.txt'; 169 | my $OUT13 = &openOut($output13); 170 | 171 | print $OUT13 "여긴 아무것도 없다. tail 을 시도해보자.\n"; 172 | foreach my $num (1..5000){ 173 | print $OUT13 "\n"; 174 | } 175 | 176 | print $OUT13 "훌륭해! 이제 이 단서를 가방에 복사하고, 가방 디렉토리로 이동해 단서 파일들 이름의 마지막 문자를 살펴보자.\n"; 177 | 178 | my $output14 = 'swordShop/northFiveSteps/westFiveSteps/xMarksTheSpot.txt'; 179 | my $OUT14 = &openOut($output14); 180 | 181 | print $OUT14 "\'JUN\'이라는 글자가 커다랗게 새겨진 오래된 나무 상자를 발견했다.\n". 182 | "상자 앞에는 \'폴리는 답을 알고 있다.\'라는 문장이 적힌 번호 자물쇠가 달려있다.\n". 183 | "이 파일에서 polly 라는 문자열을 검색하고(grep), 확인한 숫자를 \'key.txt\' 파일에 적어두자(nano 또는 vi 등).\n". 184 | "그 뒤 \'openLock.pl\' perl 스크립트를 실행하자.\n"; 185 | 186 | my @let = ('a'..'z'); 187 | foreach my $num (0..562){ 188 | my $twoDig = ceil(rand(100)); 189 | my $letThree = $let[rand(26)]; 190 | my $letFour = $let[rand(26)]; 191 | my $letFive = $let[rand(26)]; 192 | print $OUT14 "po".$letThree.$letFour.$letFive."\t$twoDig\n" unless ($letThree.$letFour.$letFive eq 'polly'); 193 | } 194 | print $OUT14 "polly\t42\n"; 195 | foreach my $num (0..324){ 196 | my $twoDig = ceil(rand(100)); 197 | my $letThree = $let[rand(26)]; 198 | my $letFour = $let[rand(26)]; 199 | my $letFive = $let[rand(26)]; 200 | print $OUT14 "po".$letThree.$letFour.$letFive."\t$twoDig\n" unless ($letThree.$letFour.$letFive eq 'polly'); 201 | } 202 | 203 | my $command14 = 'touch swordShop/northFiveSteps/westFiveSteps/key.txt'; 204 | `$command14`; 205 | 206 | 207 | #my $output15 = 'swordShop/northFiveSteps/westFiveSteps/Treasure.txt'; 208 | #my $OUT15 = &openOut($output15); 209 | 210 | #print $OUT15 "You've found my treasure! Quietly stand up, head out of the classroom, and look for a plate in the office opposite\n"; 211 | 212 | 213 | ###### write the perl scripts ##### 214 | 215 | # Script 1 216 | my $outputPerl1 = 'beach/eastOneStep/southOneStep/Clue06.pl'; 217 | my $OUTP1 = &openOut($outputPerl1); 218 | 219 | print $OUTP1 'use strict;'."\n\n"; 220 | print $OUTP1 '# 이건 컴퓨터 명령어가 포함된 짧은 프로그램인 perl 파일이다. 다음 명령어를 입력해서 실행시킬 수 있다:'."\n".'# perl Clue06.pl'."\n\n"; 221 | print $OUTP1 '&out;'."\n\n".'my @num = ('."\n"; 222 | foreach my $num (0..943){ 223 | print $OUTP1 "\n".$num.",\n\n\n\n"; 224 | } 225 | print $OUTP1 ');'."\n\n".'sub out {'."\n".'print "이거 정말이지 예쁜 진주(perl)로군! 잘만 팔면 대학원 탈출해도 되겠는 걸? 계속하기 전에 이 내용을 기록해두는 게 좋겠다.\n'. 226 | '방금 친 perl 명령어를 다시 실행하고, 지금 화면에 뜬 이 내용(STDOUT)을 잡아서 (>) Clue06_S.txt 라는 이름을 지닌 파일에 집어넣도록 하자.\n'. 227 | '그 뒤에 이 단서를 가방(toteBag)에 복사하면 되겠군.\n'. 228 | '모두 정리되면 다리(bridge)로 가서 북쪽으로 다섯 걸음, 서쪽으로 한 걸음 이동하자.\n";'."\n".'}'."\n\n"; 229 | print $OUTP1 'my @num = ('."\n"; 230 | foreach my $num (0..678){ 231 | print $OUTP1 "\n".$num.",\n\n\n\n"; 232 | } 233 | print $OUTP1 ');'."\n"; 234 | close $OUTP1; 235 | 236 | # Script 2 237 | my $outputPerl2 = 'prostheticShop/northOneStep/eastFourSteps/realClue11.pl'; 238 | my $OUTP2 = &openOut($outputPerl2); 239 | 240 | print $OUTP2 'use strict;'."\n\n"; 241 | print $OUTP2 'my @files = split /\n/, `ls`;'."\n\n"; 242 | print $OUTP2 'my $mark = 0;'."\n".'foreach my $file (@files){'."\n"; 243 | print $OUTP2 "\t".'$mark = 1 if ($file eq \'falseClue11.txt\');'."\n".'}'."\n\n"; 244 | print $OUTP2 'if ($mark == 0) {'."\n"; 245 | print $OUTP2 "\t".'`cp '.$here.'/prostheticShop/southThreeSteps/westThreeSteps/Clue11_N.txt ../../../toteBag/`;'."\n"; 246 | print $OUTP2 "\t".'print "아이고, 이걸 지워버리다니! 뭔 생각인가 대체? 빠르게 휴지통으로 가서 다시 살려내라!\n";'."\n"; 247 | print $OUTP2 "\t".'sleep 3;'."\n"; 248 | print $OUTP2 "\t".'print "장난임 깔깔 이미 그 파일은 아예 완전히 사라졌다. UNIX에서 뭔가를 삭제한다면 진짜 그냥 사라진다.\n'. 249 | '휴지통에서 복구하거나 취소하는 것 따위는 불가능하다. rm -rf 잘못 건들지 말어! 손모가지 날아가붕게.\n";'."\n"; 250 | print $OUTP2 "\t".'print "진짜 단서 11을 살펴보려면 네 가방(toteBag)을 확인해봐라(cd).\n";'."\n"; 251 | print $OUTP2 '} else {'."\n"; 252 | print $OUTP2 "\t".'print "잘못된 단서(false clue)를 제거하고(rm) 다시 시도하자,\n";'."\n".'}'."\n"; 253 | close $OUTP2; 254 | 255 | # Script 3 256 | my $outputPerl3 = 'swordShop/northFiveSteps/westFiveSteps/openLock.pl'; 257 | my $OUTP3 = &openOut($outputPerl3); 258 | print $OUTP3 '# Try xMarks the spot'."\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"; 259 | print $OUTP3 'use strict;'."\n\n"; 260 | print $OUTP3 'open IN, "key.txt" or die "could not find key.txt: $!\n";'."\n"; 261 | print $OUTP3 'my @in = ;'."\n".'if ($in[0] =~ /42/){'."\n"; 262 | print $OUTP3 "\t".'open OUT, \'>\', "openTheBox.txt" or die "could not open openTheBox.txt: $!\n";'."\n"; 263 | $theTreasure =~ s/\'/\\\'/g; 264 | print $OUTP3 "\t".'print OUT "'.$theTreasure.'\n";'."\n"; 265 | print $OUTP3 "\t".'print "철컥, 자물쇠가 풀렸다. 이제 상자를 열어보자(ls).\n";'."\n"; 266 | print $OUTP3 '} else {'."\n\t".'print "잘못된 비밀번호입니다.\n";'."\n".'}'; 267 | close $OUTP3; 268 | 269 | # Opens an output file 270 | sub openOut { 271 | my ($file) = @_; 272 | open my $OUT, '>', $file or die "Could not open file $file: $!\n"; 273 | return ($OUT); 274 | } 275 | 276 | 277 | --------------------------------------------------------------------------------