با سلام خدمت کاربران گرامی سایت پی وی لرن و کاربرانی که علاقمندان به دوره آموزشی پرل Perl. در جلسه گذشته آموزش کار با Arrays ها را به علاقمندان دوره آموزش Perl ارائه نمودیم و به طور مفصل و جزء به جزء با کاربردهای Arrays ها در این زبان برنامه نویسی آشنا شدیم. یک Array یک متغیر است که یک فهرست مرتب شده از مقادیر اسکالر را ذخیره می کند؛ متغیرهای آرایه قبل از علامت @ می آیند و برای اشاره به یک عنصر Array از علامت $ در کنار نام متغیر استفاده می شود که توسط ایندکس عناصر در square brackets دنبال می شود.در این جلسه آموزش کار با Hashes در پرل را به مخاطبان این زبان ارائه می نماییم.
در آموزش کار با Hashes در پرل به صورت جزئی و مفصل در مورد Hash ها و کاربردهای آن آشنا می شوید.
یک Hash یک جفت از است.
متغیرهای Hash قبل از علامت % می آیند.
برای اشاره به عنصر مستقل Hash باید از متغیر نام Hash که توسط اتصال دهنده “key” با مقدار curly brackets دنبال می شود؛ استفاده کرد.
در زیر می توانید یک مثال ساده از استفاده از متغیرهای Hash را ببینید.
1 2 3 4 5 6 7 8 | #!/usr/bin/perl %data = ('John Paul', 45, 'Lisa', 30, 'Kumar', 40); print "\$data{'John Paul'} = $data{'John Paul'}\n"; print "\$data{'Lisa'} = $data{'Lisa'}\n"; print "\$data{'Kumar'} = $data{'Kumar'}\n"; |
این دستور نتیجه ای به شکل زیر خواهد داشت.
1 2 3 | $data{'John Paul'} = 45 $data{'Lisa'} = 30 $data{'Kumar'} = 40 |
Hashes را می توان از طریق یک تا دو راه ایجاد کرد.
در روش اول یک مقدار مشخص به اسم کلیدی به صورت یک به یک اختصاص می یابد.
1 2 3 | $data{'John Paul'} = 45; $data{'Lisa'} = 30; $data{'Kumar'} = 40; |
در روس دوم، از یک لیست استفاده می شود که از این لیست یک جفت از مقادیر مورد استفاده قرار می گیرند.
اولین عنصر جفت انتخاب شده از لیست به عنوان key دومین مقدار این جفت به عنوان value در نظر گرفته می شود.
برای مثال :
1 | %data = ('John Paul', 45, 'Lisa', 30, 'Kumar', 40); |
برای درک بهتر مسئله می توانید از مانند مثال زیر از => به عنوان نام مستعار برای جفت key/value استفاده نمایید.
1 | %data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40); |
در این جا یک شکل دیگر از فرم بالا را می بینید. بیایید آن را بررسی نماییم.
در اینجا کلیه کلید ها قبل از خط تیره (-) آمده اند اما همان طور که می بینید از هیچ علامت نقل قولی (“) در اطراف ان ها استفاده نشده است.
1 | %data = (-JohnPaul => 45, -Lisa => 30, -Kumar => 40); |
توجه داشته باشید که تنها از یک کلمه استفاده شده است.
یعنی بدون استفاده از دکمه SPACE از این فرم Hash شده است و اگر شما چنین Hash ای را بسازید در این صورت کلید ها شروع به استفاده از خط تیره می کنند.
برای درک بیشتر به مثال زیر توجه نمایید.
1 2 | $val = %data{-JohnPaul} $val = %data{-Lisa} |
هنگام دسترسی به هر یک از عناصر اختصاصی یک Hash، ابتدا باید یک علامت پیشوند دلار $ به آن بدهید و سپس عنصر کلیدی را بعد از نام متغیر درون square brackets اضافه نمایید.
برای مثال :
1 2 3 4 5 6 7 8 | #!/usr/bin/perl %data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40); print "$data{'John Paul'}\n"; print "$data{'Lisa'}\n"; print "$data{'Kumar'}\n"; |
این دستور نتیجه ای به شکل زیر خواهد داشت.
1 2 3 | 45 30 40 |
در ادامه آموزش کار با Hashes در پرل به شما می آموزیم که چگونه برش ها و تکه هایی را از یک Hash بردارید و در یک Array دیگر به کار برید.
می توان برش هایی از Hash را از Array خارج کرد.
برای این منظور باید از پیشوند @ برای متغیرها استفاده کرد تا مقدار بازگردانی شده را که خود لیستی از مقادیر هستند ذخیره نمود.
1 2 3 4 5 6 7 8 9 | #!/uer/bin/perl %data = (-JohnPaul => 45, -Lisa => 30, -Kumar => 40); @array = @data{-JohnPaul, -Lisa}; print "Array : @array\n"; |
این دستور نتیجه ای به شکل زیر خواهد داشت.
1 | Array : 45 30 |
می توان با استفاده از تابع keys یک لیست از کلیه کلیدهای یک Hash به دست آورد.
تابع مذکور دارای سینتکس زیر است.
1 | keys %HASH |
این تابع یک Array از همه کلیدهایی که بر خود نام Hash دارند را بازگردانی می نماید.
به مثال زیر توجه نمایید.
1 2 3 4 5 6 7 8 9 10 | #!/usr/bin/perl %data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40); @names = keys %data; print "$names[0]\n"; print "$names[1]\n"; print "$names[2]\n"; |
این دستور نتیجه ای به شکل زیر خواهد داشت.
1 2 3 | Lisa John Paul Kumar |
به طور مشابه می توان از تابع valuse برای به دست آوردن یک لیست از valuse ها استفاده نمود.
سینتکس این تابع به شکل زیر است.
1 | values %HASH |
این تابع یک Array نرمال که شامل تمام مقادیر Hash است را بازگردانی می نماید.
به مثال زیر توجه نمایید.
1 2 3 4 5 6 7 8 9 10 | #!/usr/bin/perl %data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40); @ages = values %data; print "$ages[0]\n"; print "$ages[1]\n"; print "$ages[2]\n"; |
این دستور نتیجه ای به شکل زیر خواهد داشت.
1 2 3 | 30 45 40 |
اگر قصد دسترسی به یک جفت key/value از یک Hash دارید که وجود ندارد؛ به طور معمول مقدار تعریف نشده ای دریافت خواهید کرد و هشدارها فعال باشند در آن صورت در زمان اجرای این key/value هشدار دریافت خواهید کرد.
می توانید این مشکل را با استفاده از تابع exists که صرف نظر از مقدار موجود key را بازگردانی می نماید.
1 2 3 4 5 6 7 8 9 10 | #!/usr/bin/perl %data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40); if( exists($data{'Lisa'} ) ) { print "Lisa is $data{'Lisa'} years old\n"; } else { print "I don't know age of Lisa\n"; } |
در این جا ما از IF…ELSE statement استفاده کرده ایم که در جلسات بعدی به صورت مفصل به آن خواهیم پرداخت.
در حال حاضر کافی است که تصور نمایید که اگر این بخش اجرا شود وقتی که شرایط لازم وجود داشته باشد امکان اجرای آن است در غیر این صورت بخش دیگری به جای آن اجرا خواهد گردید.
بنابرین وقتی که برنامه فوق را اجرا نماییم؛ نتیجه زیر را ایجاد خواهد نمود زیرا شرایط لازم برای اجرای آن وجود دارد.
data{‘Lisa’} returns true$)
1 | Lisa is 30 years old |
می توانید اندازه Hash ( منظور تعداد عناصر موجود در یک Hash ) را با استفاده از اسکالر context به دست آورید.
این روش امکان دسترسی به keys یا values را هم فراهم می نماید.
در ابتدا لازم است که یک Array و keys یا values را به دست آورید.
در گام دوم لازم است که اندازه این Array را به شکل زیر به دست آورید.
1 2 3 4 5 6 7 8 9 10 11 12 | #!/usr/bin/perl %data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40); @keys = keys %data; $size = @keys; print "1 - Hash size: is $size\n"; @values = values %data; $size = @values; print "2 - Hash size: is $size\n"; |
این دستور نتیجه ای به شکل زیر خواهد داشت.
1 2 | 1 - Hash size: is 3 2 - Hash size: is 3 |
اضافه کردن یک جفت از key/value در Hash می تواند به سادگی و تنها از طریق یک خط کد که از اپراتور assignment operator استفاده می نماید صورت بگیرد.
اما برای حذف یک عنصر از Hash اوضاع کمی متفاوت می شود و برای حذف عناصر از Hash همان طور که در مثل ارائه شده می بینید باید از تابع delete استفاده کرد.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #!/usr/bin/perl %data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40); @keys = keys %data; $size = @keys; print "1 - Hash size: is $size\n"; # adding an element to the hash; $data{'Ali'} = 55; @keys = keys %data; $size = @keys; print "2 - Hash size: is $size\n"; # delete the same element from the hash; delete $data{'Ali'}; @keys = keys %data; $size = @keys; print "3 - Hash size: is $size\n"; |
این دستور نتیجه ای به شکل زیر خواهد داشت.
1 2 3 | 1 - Hash size: is 3 2 - Hash size: is 4 3 - Hash size: is 3 |
در این جلسه آموزش کار با Hashes در پرل را ارائه کردیم.
در جلسه بعد به آموزش IF…ELSE ها خواهیم پرداخت.
با پی وی لرن همراه باشید.