Here's one way of thinking about it:

Let's say I need $1000 now. I'd like to borrow it, and I'm willing to pay some amount of money back over time to obtain it. Money now is more valuable than money later, so I know the payments will sum to more than $1000. You have some cash on hand right now, and you'd like it to be larger; you're willing to lose access to it for a while in order to get more money later. Let's say I'm a SUPER trustworthy borrower, and that SUPER trustworthy borrowers generally borrow at 2% per year right now.

Here are some options that we would expect I (as the borrower) and you (as the lender) would find fairly equivalent:

1. You give me $1000 now, I give you $1,040.78 in 2 years.

2. You give me $1000 now, I give you $20 every month, and $551.46 in 2 years.

3. You give me $1000 now, I give you $17.53 every month for 5 years.

4. You give me $1000 now, I give you $9.20 every month for 10 years.

5. You give me $1000 now, I give you $1.67 every month for 10 years, and $1000 in 10 years.

6. You give me $1000 now, I give you $5.06 every month for 20 years.

7. You give me $1000 now, I give you $1.93 every month for 100 years.

Excel has all these functions build in; provide all but one of the rate, the number of periods, the present value (aka PV, here, $1000), the future value (aka FV, the final payment at the end), and the periodic payment size, and it's simple math to calculate the missing value.

Note that these all have, at least in theory, an equivalent value. Less money sooner, versus more money later, with the tradeoff defined by the rate (here 2%). If you, as a borrower, look that that and go "I'd really prefer a shorter term" that means the correct rate (for you) should be higher, but if 2% is the right rate, all 7 options will seem about the same.

Modern bonds often have the same value for PV and FV (that is, you pay the face value back at the end), but every combination you can imagine exists in the real world, and much financial activity involves people with a payment stream structured one way getting it transformed into one structured another way.

One thing you might have noticed: As the period gets longer, the amount you'd need to pay each period gets smaller and smaller, but it's asymptotic to a value. If $1000 now is "worth" $1.93 a month for 100 years, it'd be "worth" $1.67 a month over 500 years. Or indeed, over 1000 years.

Turns out, the payment per period works out to the PV times the interest rate. 12% APR is ~0.1667% per month, and $1000 * 0.1667% = ~$1.67 per month.

That's the finance 101 calculation, at any rate. In the real world, there's always risk in various forms.

One other point: Did you notice that the interest payment on the perpetuity was $1.67, same as for the "standard" 10 year bond? (And note, bond term doesn't matter here; it's the same for 1 year, 5 years, or 20 years.) That's not a coincidence, because they're economically equivalent (ignoring risk, liquidity, etc.). In fact, consider that as practical matter, most bonds issued by national governments will never, ever really be paid off. Instead, as they come due, they are "rolled". The principle for one lot of bonds is paid off by the issuing a new lot. But consider the math: Today I get $1000 by selling you a 5 year bond. Then every month for 5 years I pay $1.67 in interest. Then at the end of 5 years I issue a new bond for $1000 (which, let's say, you ALSO buy), and I use the proceeds to pay off the first bond. Then for 5 years I pay $1.67 in monthly interest, before we do it again. Ignoring the $1000 payments every 5 years, since they cancel out to $0, this borrowing deal is "I get $1000 now, then I pay $1.67 forever", which is...a perpetuity.

Conversely, if I did sell you a perpetuity, you could just sell it in 5 years. You'd expect to get $1000 when you sell a perpetuity on those terms, if interest rates haven't changed, so the cash flows for you buying and later selling a perpetuity is identical to buying a bond and holding it to maturity.

So in short: Not a bad idea, still happens ALL THE TIME, we just package it differently for various practical reasons.