'\" t .\" Title: fvwmperl .\" Author: [see the "AUTHOR(S)" section] .\" Generator: Asciidoctor 2.0.26 .\" Date: 2026-06-28 .\" Manual: \ \& .\" Source: \ \& .\" Language: Persian .\" .TH "FVWMPERL" "1" "2026-06-28" "\ \&" "\ \&" .ie \n(.g .ds Aq \(aq .el .ds Aq ' .ss \n[.ss] 0 .nh .ad l .de URL \fI\\$2\fP <\\$1>\\$3 .. .als MTO URL .if \n[.g] \{\ . mso www.tmac . am URL . ad l . . . am MTO . ad l . . . LINKSTYLE blue R < > .\} .SH "نام (NAME)" FvwmPerl \- دست‌ورز و پیش‌پردازنده perl برای fvwm .SH "خلاصه دستور (SYNOPSIS)" .sp برای عملکرد عادی، FvwmPerl باید توسط \fIfvwm\fP (1) اجرا شود. .sp برای اجرای این ماژول، دستور \f(CRModule FvwmPerl [params]\fP را در فایل پیکربندی fvwm قرار دهید تا ارسال دستورات به FvwmPerl آغاز شود. .SH "توضیحات (DESCRIPTION)" .sp هدف این ماژول، گسترش دستورات fvwm با قدرت اسکریپت‌نویسی perl است. این ماژول امکان جاسازی عبارات perl در فایل‌های پیکربندی fvwm و ساخت دستورات fvwm را فراهم می‌آورد. .SH "فراخوانی (INVOCATION)" .sp اگر می‌خواهید نمونه یکتا و ماندگار FvwmPerl را فراخوانی کنید، پیشنهاد می‌شود این کار را از طریق \fIStartFunction\fP انجام دهید. فراخوانی آن از ابتدا نیز امکان‌پذیر است، اما مسائلی به همراه دارد که در اینجا مطرح نشده است. .sp AddToFunc StartFunction I Module FvwmPerl .sp چندین سوئیچ خط فرمان وجود دارد: .sp \fBFvwmPerl\fP [ \fB\-\-eval\fP line ] [ \fB\-\-load\fP file ] [ \fB\-\-preprocess\fP [ \fB\-\-quote\fP char ] [ \fB\-\-winid\fP wid ] [ \fB\-\-cmd\fP ] [ \fB\-\-nosend\fP ] [ \fB\-\-noremove\fP ] [ line | file ] ] [ \fB\-\-export\fP [names] ] [ \fB\-\-stay\fP ] [ \fB\-\-nolock\fP ] [ alias ] .sp سوئیچ‌های طولانی را می‌توان به سوئیچ‌های کوتاه تک‌حرفی خلاصه کرد. .sp \fB\-e\fP|\fB\-\-eval\fP \fIline\fP .RS 4 ارزیابی کد perl داده‌شده .RE .sp \fB\-l\fP|\fB\-\-load\fP \fIfile\fP .RS 4 ارزیابی کد perl در فایل داده‌شده .RE .sp \fB\-p\fP|\fB\-\-preprocess\fP [ \fIfile\fP ] .RS 4 پیش‌پردازش فایل پیکربندی fvwm داده‌شده .sp ۵ گزینه زیر تنها همراه با گزینه \fB\-\-preprocess\fP معتبر هستند. .sp \fB\-c\fP|\fB\-\-cmd\fP \fIline\fP .RS 4 یک دستور fvwm برای پیش‌پردازش به‌جای فایل. .RE .sp \fB\-q\fP|\fB\-\-quote\fP \fIchar\fP .RS 4 تغییر نقل‌قول پیش‌فرض \*(Aq%\*(Aq. .RE .sp \fB\-w\fP|\fB\-\-winid\fP \fIwid\fP .RS 4 تنظیم صریح بافت پنجره (باید با رقم آغاز شود، می‌تواند در قالب هشت‌هشتی یا شانزده‌شانزدهی باشد؛ این شناسه پنجره در صورت وجود، بافت پنجره ضمنی را بازنویسی می‌کند). .RE .sp \fB\-\-nosend\fP .RS 4 عدم ارسال فایل پیش‌پردازش‌شده به \fIfvwm\fP جهت \fBRead\fP کردن؛ حالت پیش‌فرض ارسال است. برای پیش‌پردازش فایل‌های پیکربندی غیر fvwm مفید است. .RE .sp \fB\-\-noremove\fP .RS 4 عدم حذف فایل پیش‌پردازش‌شده پس از ارسال آن به \fIfvwm\fP جهت \fBRead\fP کردن؛ حالت پیش‌فرض حذف است. برای اشکال‌زدایی مفید است. .RE .RE .sp \fB\-x\fP|\fB\-\-export\fP [\fInames\fP] .RS 4 تعریف توابع میانبر fvwm (به‌طور پیش‌فرض، دو تابع به نام‌های Eval و .). این گزینه مستلزم \fB\-\-stay\fP است. .RE .sp \fB\-s\fP|\fB\-\-stay\fP .RS 4 ادامه اجرا پس از پردازش \fB\-\-eval\fP، \fB\-\-load\fP یا \fB\-\-preprocess\fP. به‌طور پیش‌فرض، ماژول در این حالت ماندگار نیست؛ یعنی \fB\-\-nostay\fP فرض می‌شود. .RE .sp \fB\-\-nolock\fP .RS 4 هنگامی که یکی از ۳ گزینه عملیاتی مشخص شده باشد، این گزینه باعث باز شدن فوری قفل \fIfvwm\fP می‌شود. به‌طور پیش‌فرض، عملیات درخواستی به‌صورت همگام اجرا می‌شود؛ این موضوع تنها زمانی تفاوت ایجاد می‌کند که به این صورت فراخوانی شود: .sp .if n .RS 4 .nf .fam C ModuleSynchronous FvwmPerl \-\-preprocess someconfig.ppp .fam .fi .if n .RE .sp اگر \fB\-\-nolock\fP در اینجا اضافه شود، \fBModuleSynchronous\fP بلافاصله بازمی‌گردد. توجه داشته باشید که \fBModule\fP بدون توجه به این گزینه فوراً بازمی‌گردد. .RE.SH "استفاده از نام مستعار (USING ALIAS)" .sp نام‌های مستعار (aliasها) این امکان را می‌دهند که چندین فراخوانی از ماژول داشته باشید و با هر فراخوانی به‌طور جداگانه کار کنید؛ این یک نمونه است: .sp .if n .RS 4 .nf .fam C ModuleSynchronous FvwmPerl FvwmPerl\-JustTest SendToModule FvwmPerl\-JustTest eval $a = 2 + 2; $b = $a SendToModule FvwmPerl\-JustTest eval cmd("Echo 2 + 2 = $b") KillModule FvwmPerl FvwmPerl\-JustTest .fam .fi .if n .RE .SH "نمونه پیش‌پردازش (PREPROCESSING EXAMPLE)" .sp یکی از راهکارهای مؤثر پیش‌پردازش، ارسال کل پیکربندی fvwm به همراه کد perl جاسازی‌شده به FvwmPerl \-\-preprocess است. رویکرد جایگزین دیگر، نوشتن یک اسکریپت perl است که دستورات fvwm را تولید کرده و آن‌ها را برای اجرا ارسال می‌کند؛ این اسکریپت را می‌توان با استفاده از FvwmPerl \-\-load بارگذاری کرد. با این حال، راهکارهای بینابینی نیز وجود دارند که تنها خطوط پیکربندی مجزا را پیش‌پردازش می‌کنند (یا متناوباً، دستورات perl مجزایی را اجرا می‌کنند که دستورات fvwm را تولید می‌نمایند). .sp قطعه‌کد زیر، قابلیت محاسبات ریاضی و اسکریپت‌نویسی رشته‌ای را به خطوط خاصی که به آن نیاز دارند می‌افزاید. برای استفاده از این قابلیت، بهتر است FvwmPerl را به عنوان نخستین دستور خود اجرا کنید تا بتوان از دیگر دستورات خواست که پیش‌پردازش شوند. .sp .if n .RS 4 .nf .fam C ModuleSynchronize FvwmPerl AddToFunc . + I SendToModule FvwmPerl preprocess \-c $* \&. Exec exec xterm \-name xterm\-%{++$i}%\& # use unique name \&. GotoDesk 0 %{ $[desk.n] + 1 }%\& # go to next desk \&. Exec exec %{ \-x "/usr/bin/X11/aterm" ? "aterm" : "xterm" }% \-sb # center a window Next (MyWindow) . Move \(rs %{($WIDTH \- $[w.width]) / 2}%p %{($HEIGHT \- $[w.height]) / 2}%p \&. Exec exec xmessage %{2 + 2}%\& # simple calculator \&. %{main::show_message(2 + 2, "Yet another Calculator"); ""}% .fam .fi .if n .RE .SH "اقدامات (ACTIONS)" .sp چندین اقدام (action) وجود دارد که FvwmPerl می‌تواند انجام دهد: .sp eval perl\-code .RS 4 یک خط از کد perl را ارزیابی می‌کند. تابع ویژه \fBcmd(\fPcommand*)* می‌تواند در کد perl برای پس فرستادن دستورات به fvwm استفاده شود. اگر کد perl حاوی خطا باشد، در جریان خطای استاندارد چاپ شده و سرآیند \fI[FvwmPerl][eval]:\fP به ابتدای آن افزوده می‌شود. .RE .sp load file\-name .RS 4 یک فایل حاوی کد perl را بارگذاری می‌کند. اگر مسیر فایل به‌طور کامل مشخص نشده باشد، در دایرکتوری کاربر \f(CR$FVWM_USERDIR\fP (معمولاً ~/.fvwm) و دایرکتوری داده‌های سراسری سیستم \f(CR$FVWM_DATADIR\fP جستجو می‌شود. تابع ویژه \fBcmd(\fPcommand*)* می‌تواند در کد perl برای پس فرستادن دستورات به fvwm استفاده شود. اگر کد perl حاوی خطا باشد، در جریان خطای استاندارد چاپ شده و سرآیند \fI[FvwmPerl][load]:\fP به ابتدای آن افزوده می‌گردد. .RE .sp preprocess [\-q|\-\-quote char] [\-c|\-\-cmd] [line | file] .RS 4 فایل پیکربندی fvwm (\fIfile\fP) یا (در صورت مشخص شدن \-\-cmd) خط پیکربندی (\fIline\fP) را پیش‌پردازش می‌کند. این فایل حاوی خطوط دست‌نخورده (معمولاً دستورات fvwm) و کدهای perl با قالب‌بندی ویژه است که پردازش و جایگزین می‌شوند. متنی که در میان جداکننده‌های \fB%\(rs{\fP .\|.\|. \fB}%\fP قرار گیرد، که می‌تواند از هر کجای خط آغاز شده و در هر جایی از همان خط یا خطی دیگر پایان یابد، کد perl است. پارامتر \fIquote\fP جداکننده‌های کد perl را تغییر می‌دهد. اگر یک نویسه تکی داده شود، مانند \*(Aq@\*(Aq، جداکننده‌ها \fB@\(rs{\fP .\|.\|. \fB}@\fP خواهند بود. اگر نقل‌قول داده‌شده ۲ نویسه باشد، مانند \fB<>\fP، نقل‌قول‌ها \fB<\(rs{\fP .\|.\|. \fB}>\fP خواهند بود. کد perl با نتیجه ارزیابی آن جایگزین می‌شود؛ یعنی %\(rs{$a = c; +$a}% با d جایگزین می‌شود. این ارزیابی برخلاف *eval* و *load* ذیل بسته PreprocessNamespace و بدون _use strict_ انجام می‌شود، بنابراین در استفاده از هر نام متغیری بدون ترس از تداخل آزاد هستید. فقط از متغیرهای مقداردهی‌نشده به معنای undef یا فهرست خالی استفاده نکنید (زیرا ممکن است در واقع توسط اقدام پیش‌پردازش قبلی مقداردهی شده باشند)، و در صورت نیاز پاک‌سازی انجام دهید. متغیرها و توابع بسته _main_ همچنان در دسترس هستند، مانند ::_cmd()_ یا ::_skip()_، اما دسترسی به آن‌ها حین پیش‌پردازش ایده مناسبی نیست. تابع ویژه‌ای به نام *include*(_file_) وجود دارد که یک فایل را بارگذاری کرده، آن را پیش‌پردازش می‌کند و نتیجه پیش‌پردازش‌شده را برمی‌گرداند. از بازگشت (تکرار بازگشتی) پرهیز کنید. اگر هر کد perl جاسازی‌شده‌ای حاوی خطا باشد، در جریان خطای استاندارد چاپ شده و سرآیند _[FvwmPerl][preprocess]:_ به ابتدای آن افزوده می‌شود. نتیجه جایگزینی در این حالت خالی است. متغیرهای زیر می‌توانند در کد perl استفاده شوند: `$USER+\f(CR, `$DISPLAY\fP, \f(CR$WIDTH\fP, \f(CR$HEIGHT\fP, \f(CR$FVWM_VERSION\fP, \f(CR$FVWM_MODULEDIR\fP, \f(CR$FVWM_DATADIR\fP, \f(CR$FVWM_USERDIR\fP. دستورالعمل‌های خط‌محور زیر هنگام پیش‌پردازش شناسایی می‌شوند. آن‌ها پس از جایگزین شدن کد perl (در صورت وجود) پردازش می‌شوند. .RE .sp %Repeat count .RS 4 باعث تکرار خطوط بعدی به تعداد \fIcount\fP بار می‌شود. .RE .sp %ModuleConfig module\-name [ destroy ] .RS 4 باعث می‌شود خطوط بعدی به عنوان پیکربندی ماژول مشخص‌شده تفسیر شوند. اگر destroy تعیین شود، پیکربندی قبلی ماژول ابتدا از بین می‌رود. .RE .sp %Prefix prefix .RS 4 عبارت نقل‌قول‌شده \fIprefix\fP را به عنوان پیشوند به ابتدای خطوط بعدی می‌افزاید. .RE .sp %End any\-optional\-comment .RS 4 به هر یک از دستورالعمل‌های شرح‌داده‌شده در بالا پایان می‌دهد؛ می‌تواند به‌صورت تو در تو باشد. .sp .if n .RS 4 .nf .fam C %Prefix "AddToFunc SwitchToWindow I" Iconify off WindowShade off Raise WarpToWindow 50 50 %End %ModuleConfig FvwmPager destroy Colorset 0 Font lucidasans\-10 DeskTopScale 28 MiniIcons %End ModuleConfig FvwmPager %Prefix "All (MyWindowToAnimate) ResizeMove " 100 100 %{($WIDTH \- 100) / 2}% %{($HEIGHT \- 100) / 2}% %Repeat %{$count}% br w+2c w+2c w\-1c w\-1c %End %Repeat %{$count}% br w\-2c w\-2c w+1c w+1c %End %End Prefix .fam .fi .if n .RE .RE .sp export [func\-names] .RS 4 تعریف توابع میان‌بری را به \fIfvwm\fP ارسال می‌کند که به فعال‌سازی اقدامات مختلف ماژول کمک می‌کنند (یعنی \fBeval\fP، \fBload\fP و \fBpreprocess\fP). .sp نام‌های توابع (\fIfunc\-names\fP) می‌توانند با کاما و/یا فاصله‌های خالی از هم جدا شوند. به‌طور پیش‌فرض، دو تابع Eval و . در نظر گرفته می‌شوند. .sp اقدام واقعی تعریف‌شده در یک تابع، در صورت امکان از نام تابع حدس زده می‌شود، که در آن نام تابع . برای اقدام \fBpreprocess\fP رزرو شده است. .sp برای نمونه، هر یک از این دو دستور fvwm: .sp .if n .RS 4 .nf .fam C SendToModule MyPerl export PerlEval,PP FvwmPerl \-\-export PerlEval,PPMyPerl .fam .fi .if n .RE.sp دو تابع میان‌بر زیر را تعریف کنید: .sp .if n .RS 4 .nf .fam C DestroyFunc PerlEval AddToFunc I SendToModule MyPerl eval $* DestroyFunc PP AddToFunc I SendToModule MyPerl preprocessc\-c $* .fam .fi .if n .RE .sp این ۴ اقدام را می‌توان به یکی از ۳ روش درخواست کرد: ۱) در خط فرمان هنگامی که FvwmPerl فراخوانی می‌شود (در این حالت FvwmPerl کوتاه‌مدت خواهد بود مگر اینکه \fB\-\-stay\fP یا \fB\-\-export\fP نیز داده شده باشد)، ۲) با ارسال پیام مربوطه در پیکربندی fvwm با استفاده از SendToModule، ۳) با فراخوانی تابع perl متناظر در کد perl. .RE .SH "توابع (FUNCTIONS)" .sp چندین تابع وجود دارد که کد perl می‌تواند آن‌ها را فراخوانی کند: .sp cmd($fvwm_command) .RS 4 در حالت \fBeval\fP یا \fBload\fP \- رشتهٔ \f(CR$fvwm_command\fP را به fvwm بازمی‌گرداند. در حالت \fBpreprocess\fP \- رشتهٔ \f(CR$fvwm_command\fP را به خروجی کد perl جاسازی‌شده ضمیمه می‌کند. .RE .sp do_eval($perl_code) .RS 4 این تابع معادل قابلیت \fBeval\fP بر روی رشتهٔ \fI`$perl_code`\fP است که در بالا توضیح داده شد. .RE .sp load($filename) .RS 4 این تابع معادل قابلیت \fBload\fP بر روی فایل \f(CR$filename\fP است که در بالا توضیح داده شد. .RE .sp preprocess(@params, ["\-c $command"] [$filename]) .RS 4 این تابع معادل قابلیت \fBpreprocess\fP با پارامترهای داده‌شده و فایل \f(CR$filename\fP است که در بالا توضیح داده شد. .RE .sp export($func_names, [$do_unexport]) .RS 4 این تابع معادل قابلیت \fBexport\fP با \f(CR$func_names\fP داده‌شده است که در بالا توضیح داده شد. در صورتی که پارامتر دوم درست (true) باشد، می‌تواند نام‌های توابع را \fBunexport\fP نیز بکند. نام‌های توابع باید با کاما یا/و فاصله از یکدیگر جدا شوند. اگر \fI`$func_names`\fP خالی باشد، توابع Eval و . در نظر گرفته می‌شوند. .RE .sp stop() .RS 4 ماژول را خاتمه می‌دهد. .RE .sp skip() .RS 4 از بقیهٔ کد بازخوانی رویداد (callback) صرف‌نظر می‌کند، یعنی ماژول برای گوش دادن به رویدادهای جدید ماژول بازمی‌گردد. .RE .sp unlock() .RS 4 ناهمگام‌سازی بازخوانی رویداد از fvwm. این ویژگی ممکن است برای جلوگیری از بن‌بست‌ها مفید باشد، به این صورت که معمولاً fvwm در صورتی که بازخوانی رویداد در \fIModuleTimeout\fP ثانیه به پایان نرسد، ماژول غیرپاسخگو را خاتمه می‌دهد (kill می‌کند). این دستور از این کار جلوگیری می‌کند. این مثال باعث می‌شود که FvwmPerl اجرای خود را به مدت یک دقیقه معلق کند: SendModule FvwmPerl eval unlock(); sleep(60); با این حال، اطمینان حاصل کنید که به هیچ وجه پیام جدیدی توسط fvwm در زمان مشغول بودن ماژول ارسال نشود و fvwm برای مدت طولانی روی این پیام جدید قفل نماند. در صورتی که به عملیات‌های طولانی‌مدت نیاز دارید، راهکار \fBdetach\fP را نیز ببینید. .RE .sp detach() .RS 4 بقیهٔ کد بازخوانی رویداد را از فرایند اصلی انشعاب داده (fork کرده) و جدا می‌کند. این کار ممکن است برای جلوگیری از متوقف شدن ماژول در حالتی که بازخوانی رویداد آن زمان زیادی می‌برد مفید باشد و کار در فرایند فرزند جداشده انجام شود. فرزند جداشده ممکن است همچنان بتواند دستوراتی را به fvwm ارسال کند (به این موضوع تکیه نکنید)، اما مسلماً رویدادها را دریافت نخواهد کرد و بلافاصله پس از اتمام اجرای بازخوانی خاتمه می‌یابد. در صورت استفاده از \fIdetach()\fP، بهتر است تنها از طریق یک فرایند (فرایند اصلی یا فرزند جداشده) به fvwm دستور ارسال کنید؛ اقدام به شکل دیگر اغلب باعث بروز تداخل می‌شود. .RE .sp show_message($msg, $title[, $use_stderr_too=1]) .RS 4 یک پنجرهٔ محاوره‌ای با پیام مشخص‌شده را با استفاده از هر ابزار X موجود در سیستم نمایش می‌دهد. برای اطلاعات بیشتر به \fBFVWM::Module::Toolkit\fP::*show_message* مراجعه کنید. .RE.SH "متغیرها (VARIABLES)" .sp چندین متغیر سراسری در فضای‌نام \fImain\fP وجود دارند که ممکن است در کد perl استفاده شوند: .sp .if n .RS 4 .nf .fam C $a, $b, ... $h @a, @b, ... @h %a, %b, ... %h .fam .fi .if n .RE .sp همگی آن‌ها با مقدار خالی مقداردهی اولیه می‌شوند و می‌توانند برای ذخیره وضعیت میان فراخوانی‌های گوناگون به اکشن‌های FvwmPerl (\fBeval\fP و \fBload\fP) مورد استفاده قرار گیرند. .sp اگر به نام‌های متغیر خواناتری نیاز دارید، یا عبارت no strict \*(Aqvars\*(Aq; را در آغاز هر کد perl بنویسید یا برای این کار از یک هش (hash) استفاده کنید، مانند: .sp .if n .RS 4 .nf .fam C $h{id} = $h{first_name} . " " . $h{second_name} .fam .fi .if n .RE .sp یا از یک نام پکیج استفاده کنید، مانند: .sp .if n .RS 4 .nf .fam C @MyMenu::terminals = qw( xterm rxvt ); $MyMenu::item_num = @MyMenu::terminals; .fam .fi .if n .RE .sp ممکن است یک گزینه پیکربندی برای فعال یا غیرفعال کردن strictness وجود داشته باشد. .SH "پیام‌ها (MESSAGES)" .sp FvwmPerl می‌تواند با استفاده از دستور fvwm به نام SendToModule پیام‌ها را دریافت کند. نام‌ها، معانی و پارامترهای پیام‌ها همانند اکشن‌های متناظر هستند که در بالا توصیف شدند. .sp علاوه بر این، پیام \fBstop\fP موجب خروج ماژول می‌شود. .sp پیام \fBunexport\fP [\fIfunc\-names\fP] اثر \fBexport\fP را که در بخش ACTIONS توصیف شد خنثی می‌کند. .sp پیام \fBdump\fP محتوای متغیرهای تغییریافته را دامپ (تخلیه) می‌کند (هنوز پیاده‌سازی نشده است). .SH "مثال‌ها (EXAMPLES)" .sp یک آزمایش ساده: .sp .if n .RS 4 .nf .fam C SendToModule FvwmPerl eval $h\(rs{dir} = $ENV\(rs{HOME} SendToModule FvwmPerl eval load($h\(rs{dir} . "/test.fpl") SendToModule FvwmPerl load $[HOME]/test.fpl SendToModule FvwmPerl preprocess config.ppp SendToModule FvwmPerl export Eval,PerlEval,PerlLoad,PerlPP SendToModulecFvwmPerl unexport PerlEval,PerlLoad,PerlPP SendToModule FvwmPerl stop .fam .fi .if n .RE .sp مثال زیر پس‌زمینه‌های root را در fvwmrc مدیریت می‌کند. همه این دستورها را می‌توان به StartFunction اضافه کرد. .sp .if n .RS 4 .nf .fam C Module FvwmPerl \-\-export PerlEval # find all background pixmaps for a later use PerlEval $a = $ENV\(rs{HOME} . "/bg"; \(rs opendir DIR, $a; @b = grep \(rs{ /xpm$/ } readdir(DIR); closedir DIR # build a menu of background pixmaps AddToMenu MyBackgrounds "My Backgrounds" Title PerlEval foreach $b (@b) \(rs { cmd("AddToMenu MyBackgrounds $b Exec fvwm\-root $a/$b") } # choose a random background to load on start\-up PerlEval cmd("AddToFunc \(rs InitFunction + I Exec exec fvwm\-root $a/" . $b[int(random(@b))]) .fam .fi .if n .RE.SH "گریزدهی (ESCAPING)" .sp دستور \fBSendToModule\fP درست مانند هر دستور دیگر fvwm، چندین متغیر با پیشوند علامت دلار را بسط می‌دهد. این مسئله ممکن است با علامت‌های دلار مورد استفاده در perl تداخل داشته باشد. می‌توانید با قرار دادن یک خط پیوند (dash) پیش از SendToModule از این تداخل جلوگیری کنید. در هر جفت زیر، این ۲ خط معادل یکدیگرند: .sp .if n .RS 4 .nf .fam C SendToModule FvwmPerl eval $$d = "$[DISPLAY]" \-SendToModule FvwmPerl eval $d = "$ENV\(rs{DISPLAY}" SendToModule FvwmPerl eval \(rs cmd("Echo desk=$d, display=$$d") SendToModule FvwmPerl preprocess \-c \(rs Echo desk=%("$d")%, display=%\(rs{$$d}% .fam .fi .if n .RE .sp راهکار دیگر برای اجتناب از گریزدهی نمادهای خاص مانند دلار و بک‌اسلش، ایجاد یک فایل perl در ~/.fvwm و سپس بارگذاری آن است: .sp .if n .RS 4 .nf .fam C SendToModule FvwmPerl load build\-menus.fpl .fam .fi .if n .RE .sp اگر نیاز دارید دستوری را که با خط پیوند آغاز می‌شود پیش‌پردازش کنید، باید پیش از آن از «\-\-» استفاده نمایید: .sp .if n .RS 4 .nf .fam C # this prints the current desk, i.e. "0" SendToModule FvwmPerl preprocess \-c Echo "$%\(rs{$a = "c"; ++$a}%" # this prints "$d" SendToModule FvwmPerl preprocess \-c \-\- \-Echo "$%\(rs{"d"}%" # this prints "$d" (SendToModule expands $$ to $) SendToModule FvwmPerl preprocess \-c \-\- \-Echo "$$%\(rs{"d"}%" # this prints "$$d" \-SendToModule FvwmPerl preprocess \-c \-\- \-Echo "$$%\(rs{"d"}%" .fam .fi .if n .RE .sp مجدداً، پیشنهاد می‌شود دستور(ها)ی خود را در یک فایل قرار داده و در عوض آن فایل را پیش‌پردازش کنید. .SH "هشدارها (CAVEATS)" .sp برنامهٔ FvwmPerl به دلیل این‌که با perl نوشته شده و با perl سر و کار دارد، از این شعار معروف perl پیروی می‌کند: «بیش از یک راه برای انجام آن وجود دارد، بنابراین انتخاب با شماست.» .sp در ادامه جفت‌های معادل دیگری از خطوط آورده شده است: .sp .if n .RS 4 .nf .fam C Module FvwmPerl \-\-load "my.fpl" \-\-stay Module FvwmPerl \-e load("my.fpl") \-s SendToModule FvwmPerl preprocess \-\-quote @ my.pp SendToModule FvwmPerl eval preprocess(\(rs{quote => @}, "my.ppp"); .fam .fi .if n .RE .sp هشدار: شما می‌توانید با ارزیابی کد مناسب در perl بر نحوهٔ کارکرد FvwmPerl اثر بگذارید؛ این موضوع یک قابلیت تلقی می‌شود، نه یک باگ. اما لطفاً این کار را انجام ندهید، بلکه ماژول fvwm اختصاصی خود را با perl بنویسید. .SH "همچنین ببینید (SEE ALSO)" .sp صفحهٔ راهنمای \fIfvwm\fP (1) تمامی دستورهای موجود را شرح می‌دهد. .sp اساساً، در کد perl خود می‌توانید از هر تابع یا متد کلاسی از کتابخانهٔ perl که به همراه fvwm نصب شده است استفاده کنید؛ به صفحات راهنمای بسته‌های perl شامل \fBGeneral::FileSystem\fP، \fBGeneral::Parse\fP و \fBFVWM::Module\fP مراجعه کنید..SH "نویسنده (AUTHOR)" .sp Mikhael Goikhman \c .MTO "migo\(athomemail.com" "" "."