انگلیسیفرانسویاسپانیایی

فاویکون OnWorks

perlpragma - آنلاین در ابر

اجرای perlpragma در ارائه دهنده هاست رایگان OnWorks از طریق Ubuntu Online، Fedora Online، شبیه ساز آنلاین ویندوز یا شبیه ساز آنلاین MAC OS

این دستور perlpragma است که می تواند در ارائه دهنده هاست رایگان OnWorks با استفاده از یکی از چندین ایستگاه کاری آنلاین رایگان ما مانند Ubuntu Online، Fedora Online، شبیه ساز آنلاین ویندوز یا شبیه ساز آنلاین MAC OS اجرا شود.

برنامه:

نام


perlpragma - نحوه نوشتن پراگمای کاربر

شرح


پراگما ماژولی است که بر بخشی از زمان کامپایل یا زمان اجرا تأثیر می گذارد
رفتار پرل، مانند "سخت" یا "هشدار". با پرل 5.10 دیگر نیستید
محدود به ساخته شده در پراگماتا. اکنون می توانید پراگماتای ​​کاربر ایجاد کنید که آن را تغییر می دهد
رفتار توابع کاربر در محدوده واژگانی

A اساسی مثال


به عنوان مثال، فرض کنید که باید کلاسی ایجاد کنید که ریاضیات بارگذاری شده را اجرا کند
اپراتورها، و مایلند پراگمای خود را ارائه دهند که عملکردی بسیار شبیه به "استفاده" دارد
عدد صحیح؛ "شما این کد را می خواهید

از MyMaths استفاده کنید.

my $l = MyMaths->new(1.2);
my $r = MyMaths->new(3.4);

چاپ "A: ", $l + $r, "\n";

از myint استفاده کنید.
چاپ "B: ", $l + $r, "\n";

{
no myint;
چاپ "C: ", $l + $r, "\n";
}

چاپ "D: ", $l + $r, "\n";

no myint;
چاپ "E: ", $l + $r, "\n";

برای دادن خروجی

A: 4.6
B: 4
C: 4.6
د: 4
E: 4.6

به عنوان مثال، جایی که "استفاده از myint;" در واقع، عملیات جمع مجبور به عدد صحیح می شود، در حالی که
به طور پیش فرض آنها نیستند، با رفتار پیش فرض که از طریق "no myint" بازیابی می شود.

حداقل پیاده سازی بسته "MyMaths" چیزی شبیه به این خواهد بود:

بسته MyMaths;
استفاده از هشدارها؛
سخت استفاده کنید
استفاده از myint();
استفاده از اضافه بار '+' => زیر {
من ($l، $r) = @_;
# پاس 1 برای بررسی یک سطح تماس از اینجا
اگر (myint::در اثر(1)) {
int($$l) + int($$r);
} دیگری {
$$l + $$r;
}
};

زیر جدید {
my ($class, $value) = @_;
bless \$value, $class;
}

1;

توجه داشته باشید که چگونه کاربر pragma "myint" را با یک لیست خالی "()" بارگذاری می کنیم تا از "وارد کردن" آن جلوگیری کنیم.
فراخوانده شدن.

تعامل با کامپایل پرل در داخل بسته "myint" اتفاق می افتد:

بسته myint;

سخت استفاده کنید
استفاده از هشدارها؛

واردات فرعی {
$^H{"myint/in_effect"} = 1;
}

unimport فرعی {
$^H{"myint/in_effect"} = 0;
}

sub in_effect {
سطح $ من = shift // 0;
my $hinthash = (تماس گیرنده($level))[10];
بازگشت $hinthash->{"myint/in_effect"};
}

1;

از آنجایی که پراگماها به عنوان ماژول‌ها پیاده‌سازی می‌شوند، مانند هر ماژول دیگری، "استفاده از myint;" تبدیل می شود

شروع {
نیازمند myint;
myint->import();
}

و "no myint;" است

شروع {
نیازمند myint;
myint->unimport();
}

از این رو روال های "واردات" و "unimport" نامیده می شوند گردآوری زمان برای کد کاربر

کاربر pragmata وضعیت خود را با نوشتن روی هش جادویی "%^H" ذخیره می کند، از این رو این دو مورد هستند
روال ها آن را دستکاری می کنند. اطلاعات وضعیت در "%^H" در optree ذخیره می شود و می تواند باشد
بازیابی شده فقط خواندنی در زمان اجرا با "caller()"، در فهرست 10 از لیست بازگردانده شده
نتایج. در مثال پراگما، بازیابی در روال "in_effect()"، کپسوله شده است.
که تعداد فریم های فراخوانی را به عنوان پارامتر می گیرد تا مقدار the را پیدا کند
پراگما در اسکریپت کاربر این از "caller()" برای تعیین مقدار استفاده می کند
$^H{"myint/in_effect"} زمانی که هر خط از اسکریپت کاربر فراخوانی شد، و بنابراین
معناشناسی صحیح را در زیربرنامه اجرای اضافه بارگذاری شده ارائه کنید.

کلید نامگذاری


تنها یک "%^H" وجود دارد، اما به طور خودسرانه بسیاری از ماژول ها می خواهند از محدوده آن استفاده کنند
مفاهیم. برای جلوگیری از پا گذاشتن روی انگشتان یکدیگر، آنها باید حتما از متفاوت استفاده کنند
کلیدها در هش بنابراین معمول است که یک ماژول فقط از کلیدهایی که شروع می شوند استفاده کند
با نام ماژول (نام بسته اصلی آن) و کاراکتر "/". بعد از این
پیشوند شناسایی ماژول، بقیه کلید کاملاً به ماژول بستگی دارد: ممکن است
هر شخصیتی را شامل شود. به عنوان مثال، یک ماژول "Foo::Bar" باید از کلیدهایی مانند استفاده کند
به صورت "Foo::Bar/baz" و "Foo::Bar/$%/_!". ماژول هایی که این کنوانسیون را دنبال می کنند، همه به خوبی بازی می کنند
با همدیگر.

هسته پرل از تعداد انگشت شماری کلید در "%^H" استفاده می کند که از این قرارداد پیروی نمی کنند، زیرا
آنها قبل از آن هستند. کلیدهایی که از قرارداد پیروی می کنند با کلیدهای اصلی تضادی ندارند
کلیدهای تاریخی

پیاده سازی جزئیات


Optree بین رشته ها به اشتراک گذاشته می شود. این به این معنی است که این احتمال وجود دارد که optree
از رشته خاص (و بنابراین نمونه مفسر) که ایجاد شده است، بیشتر زنده خواهد ماند
بنابراین، اسکالرهای واقعی پرل را نمی توان در optree ذخیره کرد. در عوض از یک فرم فشرده استفاده می شود،
که فقط می تواند مقادیری را ذخیره کند که اعداد صحیح (امضا و بدون علامت)، رشته یا "undef" هستند -
مراجع و مقادیر ممیز شناور رشته ای هستند. اگر نیاز به ذخیره چندگانه دارید
مقادیر یا ساختارهای پیچیده، شما باید آنها را سریال کنید، به عنوان مثال با "pack". در
حذف یک کلید هش از "%^H" ثبت می شود، و مثل همیشه می توان آن را از
وجود یک کلید با مقدار "undef" با "وجود".

نکن تلاش برای ذخیره ارجاع به ساختارهای داده به عنوان اعداد صحیح که از طریق بازیابی می شوند
"تماس گیرنده" و برگردانده می شود، زیرا این موضوع ایمن نخواهد بود. دسترسی ها به
ساختار بدون قفل (که برای اسکالرهای پرل ایمن نیست) و یا ساختار
باید نشتی داشته باشد، یا باید با پایان یافتن نخ ایجاد کننده آن آزاد شود، که ممکن است باشد
قبل از ارجاع optree حذف می شود، اگر رشته های دیگر بیشتر از آن عمر کنند.

از perlpragma به صورت آنلاین با استفاده از خدمات onworks.net استفاده کنید


سرورها و ایستگاه های کاری رایگان

دانلود برنامه های ویندوز و لینوکس

دستورات لینوکس

Ad